[Python] 시스템 OS 인코딩 찾기 Develop Tip

요즘에는 파이썬3을 Windows, Mac, Linux 등에 모두 사용하면서
하나의 코드로 멀티 플랫폼에 도는 것을 목표로 해 왔습니다만,
다음과 같이 특정 명령을 수행하고,

cmd = [ ... ]
po = subprocess.Popen(cmd, stdout=subprocess.PIPE)
po.wait()
out = po.stdout.read().decode('utf-8').strip()

그 결과가 파이썬3에서는 byte 로 결과가 나오므로
문자열로 바꾸기 위해서는 위의 마지막 줄 처럼 decode를 시켜야 하는데
문제는 무조건 utf-8 로 줄 수 없다는 데 있습니다.
(물론 결과에 한글이 포함되어 있다고 가정합니다)
위의 코드를 실행하면 마지막 줄에서 예외가 발생합니다.


맥과 리눅스에서는 디폴트로 UTF-8 이라 해도 괜찮지만,
한글이 설치된 윈도우10인 경우에는 cp949 로 디코딩을 시켜야
정상 동작합니다.

찾다가 아마도 크로스 플랫폼에 모두 잘 동작되는 코드를 
찾은 것 같습니다. 물론 일본어 윈도우에도 잘 될 것으로 보입니다.

결론은

import locale
os_encoding = locale.getpreferredencoding()
print(os_encoding)

위와 같은 코드를 돌리면,
한글 윈도우10 에서는 "cp949" 가 결과로 나오고
Mac 에서 테스트를 했더니 "UTF-8" 이 나옵니다.

따라서 처음 코드는 다음과 같이 수정하면 안전한 코드가 됩니다.

import locale
os_encoding = locale.getpreferredencoding()
cmd = [ ... ]
po = subprocess.Popen(cmd, stdout=subprocess.PIPE)
po.wait()
out = po.stdout.read().decode(os_encoding).strip()


어느 분께는 도움이 되셨기를 ..

덧글

댓글 입력 영역

구글애드텍스트