UnicodeDecodeError: 'cp949' codec can't decode bytes in position : illegal multibyte sequence

    UnicodeDecodeError: 'cp949' codec can't decode bytes in position : illegal multibyte sequence

     에러 대처법

    파이썬 3.x 부터는 utf-8로 작성된 문서는 default로 읽지 못하는 것으로 보인다.  2가지 방법이 존재하게 되는데 하나는 파일을 utf-8로 저장하지 않으면 되는 것이고, 2번째 방법은 소스에 약간 손을 대면 된다. 

     

    1. AS-IS 에러 발생 코드

    f = open("it_title.txt", "r")
    
    while True:
        line = f.readline()
        print(line)
        if not line: break
    f.close()

    UnicodeDecodeError: 'cp949' codec can't decode byte 0xec in position 14: illegal multibyte sequence

     

     

    2. To-Be_A 

    구글링 해서 약간을 손본 코드, open 펑션에 "utf-8"을 추가하면 된다고 해서...

    f = open("it_title.txt", "r", "utf-8")
    
    while True:
        line = f.readline()
        print(line)
        if not line: break
    f.close()

    이렇게 수정했으나, 역시 에러가 발생하였다.

    TypeError: an integer is required (got type str)

     

    f = open("it_title.txt", "r", encoding="utf-8")
    
    while True:
        line = f.readline()
        print(line)
        if not line: break
    f.close()

    이렇게 캐릭터셋만 넣으면 안되고 encoding이라고 명시를 해줘야 한다.

     

    To-Be_B 

    보다 쉬운 방법은 import로 codecs라는 라이브러리를 추가를 하는 방법이다.

    import codecs
    
    f = codecs.open("it_title.txt", "r", "utf-8")
    
    while True:
        line = f.readline()
        print(line)
        if not line: break
    f.close()

     

    위와 같이 수정한 후, 소스는 정상적으로 잘 나오는 것을 확인했다.

    파이썬이 편리한 면도 분명있지만, 비상식적인 업데이트 같은 부분은 이해가 안되는 측면이 있다.ex) 2.x 소스를 3.x에서 실행하면 안되는 문제 등...

    반응형

    댓글

    Designed by JB FACTORY