html 저장 오류 ‘cp949’ codec can’t encode character ‘\xa9’

티스토리 블로그 작성을 위해 html을 자동으로 생성하는 파이썬 코드를 작성하고 with open()으로 html 파일로 저장했으나 다음과 같은 오류가 났네요.

오류가 난 파이썬 코드

with open('./blog_html/sample.html', 'w') as f:
  f.write(html)

오류 코드는

"Traceback (most recent call last):
  File "d:\python_dev\blog_create.py", line 518, in 
    main(ext_no, name, post_title, comment)
  File "d:\python_dev\blog_create.py", line 504, in main 
    f.write(html) 
UnicodeEncodeError: 'cp949' codec can't encode character '\xa9' in position 11589: illegal multibyte sequence"

오류 원인 파악 및 해결 방법

이 오류는 html 파일 생성 시 문자열(html)을 write(기록)하려고 할 때 ‘cp949’ 코덱으로는 인코딩할 수 없는 문자(‘\xa9’)가 포함되어 있기 때문에 발생한다고 합니다.

이러한 문자를 html 파일에 쓰려면 인코딩 문제를 회피하도록 해야 하는데, 문자열을 파일에 쓸 때 인코딩 오류를 피하기 위해

encoding = ‘utf-8’ 을 추가해서 되는 경우도 있지만, 이모지 등의 특수 문자가 있는 문자열인 경우 이 또한 에러가 나는 경우가 많습니다.

특수 문자까지 해결하기 위해서는 파일을 바이너리 모드로 열고 원하는 인코딩을 직접 지정하는 방법이 있습니다.

with open('./blog_html/sample.html', 'wb') as f:   
  f.write(html.encode('utf-8'))

위와 같이 수정하고 실행해보니 저장이 잘 되었네요!