본문 바로가기
Hardware/MCU(Arduino,ESP8266)

PlatformIO IDE - UnicodeDecodeError 해결하기

by lovey25 2020. 7. 23.

Vsivual Studio Code + PlatformIO(PIO) 환경에서 아두이노 프로젝트 컴파일 할 때, 코드에 주석을 한글로 달아둔 경우 드물게 다음과 같은 에러가 발생하는 경우가 있습니다.

"UnicodeDecodeError: 'cp949' codec can't decode byte 0xbf in position 124: illegal multibyte sequence"

"UnicodeDecodeError" 말 그대로 유니코드로 해석이 안됩니다 라는건데요. 뒤에 'cp949' 라는 부분은 윈도우에서 사용하는 인코딩의 한 종류로, 949번 코드페이지, 그러니까 한글 인코딩을 얘기하는 겁니다. cp949 말고 다른 메시지가 나올 수도 있는것 같습니다.

이 문제의 원인은, PIO가 파이썬3 기반으로 만들어져 있는데 파이썬에서 유니코드 인코딩의 텍스트를 읽어오는데 어떤 이슈가 있는것 같습니다. 대충 찾아본 바에 따르면 PIO차기 버전에서는 내장 파이썬 엔진 사용해서 이런 문제가 해결되는것 처럼 보이는데 잘 모르는 분야라 맞는지는 모르겠습니다.

일단 원인은 알았으니 해결하는 방법입니다.

위에서 에러가 난 코드파일을 jEdit라는 텍스트 편집기에서 열어보면 아래 그림처럼 UTF-8이라는 코딩이라고 나옵니다.

이렇게 UTF-8로 되어있는 파일중에 소스에 한글이 포함되어 있는 경우 UnicodeDecodeError"가 발생하는데요. 이걸 파이썬3가 해석하는데 문제가 없도록 ANSI로 바꿔주면 됩니다. 그런데 ANSI로 변환을 하면 한글이 다 깨지는 문제가 있습니다. 그래서 저도 이유는 모르지만 에러메시지에서 파이썬이 인코딩을 cp949를 바탕으로 해석하려고 하는것 같으니 소스파일의 인코딩을 cp949로 변환해봤습니다.

jEdit를 사용한 이유가 인코딩 변환도 가능하기 때문인데요. jEdit하단의 인코딩 코드 부분을 더블클릭해서 버퍼 옵션이라는 창에서 인코딩을 cp949는 목록에 없어서 비슷해보이는 x-windows-949로 변경해주고 저장을 합니다.

다시 PIO로 돌아가서 컴파일을 해주면 문제없이 해결되는것을 확인 할 수 있습니다.

 

끝!

728x90

댓글0