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-1
UTF-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
인코딩이 설정된 경우 인코딩을 표시하는 명령이 있음
- 에 가다
View
->Show Console
(또는 +)`
- 맨 아래에 필드에 입력
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
).
또는 동등하게 환경 변수를 설정할 수 있다.PYTHONUTF8
1에
솔루션을 정렬하는 데 도움이 되는 코드와 동일한 Mysql 문자 인코딩을 변경하는 경우. photo=open('pic3.png',encoding=latin1)
'IT이야기' 카테고리의 다른 글
사전을 복사하고 사본만 편집하는 방법 (0) | 2022.03.22 |
---|---|
다시 로드한 후 vue-temp가 잘못된 매개 변수를 설정함 (0) | 2022.03.21 |
왜 우리는 sys를 사용하지 말아야 하는가.py 스크립트에서 setdefaultencoding("utf-8")을 설정하시겠습니까? (0) | 2022.03.21 |
Vue.js의 사용자 지정 양식 구성 요소에 네이티브 입력 이벤트를 사용해야 하는가? (0) | 2022.03.21 |
경고: prop 'className'이(가) 일치하지 않음. 의미-의리-반응과 함께 스타일 구성요소를 사용할 때 (0) | 2022.03.21 |