IT이야기

UnicodeDecodeError: 'charmap' 코덱이 위치 Y: 문자 맵을 디코딩할 수 없음

cyworld 2022. 3. 21. 09:04
반응형

UnicodeDecodeError: 'charmap' 코덱이 위치 Y: 문자 맵을 디코딩할 수 없음

나는 정보가 가득한 텍스트 파일로 조작을 하기 위해 파이톤 3 프로그램을 구하려고 한다.그러나 파일을 읽으려고 하면 다음과 같은 오류가 발생한다.

 Traceback (most recent call last):  
     File "SCRIPT LOCATION", line NUMBER, in <module>  
     `text = file.read()`  
     File "C:\Python31\lib\encodings\cp1252.py", line 23, in decode  
     `return codecs.charmap_decode(input,self.errors,decoding_table)[0]`  
     UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 2907500: character maps to `<undefined>`  

해당 파일이 다음 파일을 사용하지 않는 경우CP1252부호하하다른 인코딩을 사용하는 겁니다.네가 스스로 알아내야 할 것.흔한 것은Latin-1그리고UTF-8. 0x90은 사실 아무 의미도 없기 때문에Latin-1UTF-8(여기서 0x90은 연속 바이트) 가능성이 더 높다.

파일을 열 때 인코딩을 지정하십시오.

file = open(filename, encoding="utf8")

만약file = open(filename, encoding="utf-8")잘 안 되네, 해 봐봐.
file = open(filename, errors="ignore")불필요한 문자를 제거하려는 경우.(문서)

또는 웹 사이트에 파일을 업로드하는 등 파일을 디코딩할 필요가 없는 경우 다음을 사용하십시오.

open(filename, 'rb')

여기서 r = 판독값, b = 이진수

@LennartRegebro의 대답에 대한 연장선으로서:

파일이 사용하는 인코딩이 무엇인지 알 수 없고 위의 솔루션이 작동하지 않는 경우(알 수 없음)utf8그리고 당신은 단지 추측에 불과하다는 것을 알게 되었다 - 어떤 인코딩인지 식별하는데 사용할 수 있는 온라인 도구가 있다.그들은 완벽하지는 않지만 보통은 잘 작동한다.당신이 인코딩을 알아낸 후에 당신은 위의 솔루션을 사용할 수 있을 것이다.

편집: (주석에서 복사됨)

꽤 인기 있는 텍스트 편집기Sublime Text인코딩이 설정된 경우 인코딩을 표시하는 명령이 있음

  1. 에 가다View->Show Console(또는 +)`

여기에 이미지 설명을 입력하십시오.

  1. 맨 아래에 필드에 입력view.encoding()그리고 최선을 희망한다(나는 아무것도 얻을 수 없었다.Undefined하지만 아마 더 좋은 행운을 얻을 수 있을거야...)

여기에 이미지 설명을 입력하십시오.

TLDR?도:file = open(filename, encoding='cp437)

왜? 사용 시:

file = open(filename)
text = file.read()

Python은 파일이 현재 환경과 동일한 코드 페이지를 사용한다고 가정하고(개방 포스트의 경우 cp1252), 자체 기본 UTF-8로 디코딩하려고 한다. 파일에 0x90과 같이 정의되지 않은 값의 문자가 포함되어 있으면 유니코드DecodeError가 발생한다.때로는 파일의 인코딩을 알 수 없고, 때로는 파일의 인코딩이 파이썬(예: cp790)에 의해 처리되지 않을 수도 있고, 때로는 파일이 혼합된 인코딩을 포함할 수도 있다.

이러한 문자가 필요하지 않은 경우, 물음표로 대체하기로 결정할 수 있으며, 다음과 같은 문자로 대체될 수 있다.

file = open(filename, errors='replace')

또 다른 해결책은 다음을 사용하는 것이다.

file = open(filename, errors='ignore')

그러면 글자들은 그대로 남겨지지만 다른 오류들도 가려질 것이다.

꽤 좋은 해결책은 인코딩을 지정하는 것이다. 그러나 어떤 인코딩(cp1252와 같은)이 아니라 모든 문자가 정의된 인코딩(cp437과 같은)을 가진 인코딩을 지정하는 것이다.

file = open(filename, encoding='cp437')

코드 페이지 437은 원래 DOS 인코딩이다.모든 코드가 정의되기 때문에 파일을 읽는 동안 오류가 발생하지 않으며, 오류를 마스킹하지 않으며, 문자가 보존된다(전혀 온전하지 않지만 여전히 구별할 수 있음

시간 낭비는 그만하고, 다음을 추가하기만 하면 된다.encoding="cp437"그리고errors='ignore'읽기 및 쓰기 코드에 모두 적용:

open('filename.csv', encoding="cp437", errors='ignore')
open(file_name, 'w', newline='', encoding="cp437", errors='ignore')

고즈페드

윈도우의 아나콘다에서 일하는 사람들에게도 같은 문제가 있었다.메모장+++는 내가 해결하도록 도와줘.

파일을 메모장++에서 여십시오.오른쪽 하단에 현재 파일 인코딩이 표시된다.상단 메뉴에서 "보기" 옆에 있는 "인코딩"을 찾으십시오."인코딩"에서 "문자 집합"으로 이동한 후 인내심을 갖고 필요한 엔콘을 찾으십시오.내 경우 "Windows-1252" 인코딩이 "서유럽어"에서 검색됨

제안 솔루션을 적용하기 전에 파일(및 오류 로그)에 나타나는 유니코드 문자를 확인하십시오.0x90: https://unicodelookup.com/#0x90/1 (또는 유니코드 컨소시엄 사이트 http://www.unicode.org/charts/에서 직접 검색)0x0090)

그런 다음 파일에서 삭제하는 것을 고려하십시오.

나는 utf16으로 인코딩을 했다.

file = open('filename.csv', encoding="utf16")

파이썬의 최신 버전(3.7부터)에서는 통역 옵션을 추가할 수 있다.-Xutf8당신의 문제를 해결할 수 있을 것이다.Pycharm을 사용하는 경우, Run > Edit configuration(실행 > 구성 편집)(탭에서 필드 인터프리터 옵션의 값을 다음으로 변경)-Xutf8).

또는 동등하게 환경 변수를 설정할 수 있다.PYTHONUTF81에

솔루션을 정렬하는 데 도움이 되는 코드와 동일한 Mysql 문자 인코딩을 변경하는 경우. photo=open('pic3.png',encoding=latin1) 여기에 이미지 설명을 입력하십시오.

참조URL: https://stackoverflow.com/questions/9233027/unicodedecodeerror-charmap-codec-cant-decode-byte-x-in-position-y-character

반응형