파이썬, UnicodeDecodeError

파이썬에서 os 명령어를 실행하는 프로그램을 작성하고 실행할때, 때때로 아래와 같은 오류가 발생했다.

python3.6 code:

import subprocess
def linux_cmd(cmd, s):
    s = s.strip()
    p = subprocess.Popen([cmd, s], stdout=subprocess.PIPE)
    r = p.communicate()
    return r[0]

if __name__=='__main__':
    k = linux_cmd('cat', 'a.txt')
    print(k)

오류:

Traceback (most recent call last):
  File "test.py", line 13, in <module>
    k = whois_search('google.com')
  File "test.py", line 7, in whois_search
    r = str(proc.read().decode('ascii'))
  File "/home/boxcorea/whois_project/lib/python3.6/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 5160: ordinal not in range(128)

원인은 실행결과가 utf-8일때, 결과를 return할때, ascii 코드로 변환되지 않는 문자가 포함되면 발생했다.(잘 되는 경우도 있음)

결과를 강제로 ASCII로 반환하도록 코드 수정

return r[0].decode('ascii')

그러나 같은 오류 발생.

변환시 오류를 무시하도록 아래와 같이 변경

return r[0].decode('ascii', 'ignore')

이제 이상 없이 잘 동작한다.

1 comment

  1. utf-8을 ASCII로 디코딩 할때, 유실되는 문자가 많을 수도 있음.
    완벽한 해결책이 아님을 확인함.

답글 남기기

Your email address will not be published.