[PYTHON] UnicodeDecodeError : 'utf8'코덱은 0 위치의 바이트 0xa5을 디코딩 할 수 없습니다 : 잘못된 시작 바이트
PYTHONUnicodeDecodeError : 'utf8'코덱은 0 위치의 바이트 0xa5을 디코딩 할 수 없습니다 : 잘못된 시작 바이트
Python-2.6 CGI 스크립트를 사용하고 있지만 json.dumps ()를 수행하는 동안 서버 로그에서이 오류를 발견했습니다.
Traceback (most recent call last):
File "/etc/mongodb/server/cgi-bin/getstats.py", line 135, in <module>
print json.dumps(__getdata())
File "/usr/lib/python2.7/json/__init__.py", line 231, in dumps
return _default_encoder.encode(obj)
File "/usr/lib/python2.7/json/encoder.py", line 201, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib/python2.7/json/encoder.py", line 264, in iterencode
return _iterencode(o, 0)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa5 in position 0: invalid start byte
여기서,
__get data () 함수는 사전 {}을 반환합니다.
이 질문을 게시하기 전에 나는이 질문을 이렇게 언급했다.
다음 라인은 JSON 인코더를 해치는 것입니다.
now = datetime.datetime.now()
now = datetime.datetime.strftime(now, '%Y-%m-%dT%H:%M:%S.%fZ')
print json.dumps({'current_time': now}) // this is the culprit
나는 그것을 임시로 수정했다.
print json.dumps( {'old_time': now.encode('ISO-8859-1').strip() })
그러나 나는 그것을 할 올바른 방법이 확실하지 않습니다.
해결법
-
==============================
1.사전에 비 ASCII 문자가 있고 인코딩 / 디코딩 할 수 없기 때문에 오류가 발생합니다. 이 오류를 피할 수있는 간단한 방법은 다음과 같이 encode () 함수를 사용하여 문자열을 인코딩하는 것입니다 (a가 ASCII 문자가 아닌 문자열 인 경우).
사전에 비 ASCII 문자가 있고 인코딩 / 디코딩 할 수 없기 때문에 오류가 발생합니다. 이 오류를 피할 수있는 간단한 방법은 다음과 같이 encode () 함수를 사용하여 문자열을 인코딩하는 것입니다 (a가 ASCII 문자가 아닌 문자열 인 경우).
a.encode('utf-8').strip()
-
==============================
2.아래 코드를 사용해보십시오.
아래 코드를 사용해보십시오.
-
==============================
3.문자열에 비 ASCII 문자가 인코딩되어 있습니다.
문자열에 비 ASCII 문자가 인코딩되어 있습니다.
코드에서 다른 인코딩을 사용해야하는 경우 utf-8로 디코딩 할 수 없습니다. 예 :
>>> 'my weird character \x96'.decode('utf-8') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Python27\lib\encodings\utf_8.py", line 16, in decode return codecs.utf_8_decode(input, errors, True) UnicodeDecodeError: 'utf8' codec can't decode byte 0x96 in position 19: invalid start byte
이 경우 인코딩은 windows-1252이므로 다음을 수행해야합니다.
>>> 'my weird character \x96'.decode('windows-1252') u'my weird character \u2013'
이제 유니 코드를 사용하면 utf-8로 안전하게 인코딩 할 수 있습니다.
-
==============================
4.read_csv () 명령에서 다른 코덱 패키지를 정의하여 간단히 전환했습니다.
read_csv () 명령에서 다른 코덱 패키지를 정의하여 간단히 전환했습니다.
인코딩 = '유니 코드 _ 에스케이프'
-
==============================
5.코드 상단에 기본 인코더 설정
코드 상단에 기본 인코더 설정
import sys reload(sys) sys.setdefaultencoding("ISO-8859-1")
-
==============================
6.다음 라인은 JSON 인코더를 해치는 것입니다.
다음 라인은 JSON 인코더를 해치는 것입니다.
now = datetime.datetime.now() now = datetime.datetime.strftime(now, '%Y-%m-%dT%H:%M:%S.%fZ') print json.dumps({'current_time': now}) // this is the culprit
나는 그것을 임시로 수정했다.
print json.dumps( {'old_time': now.encode('ISO-8859-1').strip() })
이것을 임시 수정으로 정확하게 표시하십시오 (확실하지 않습니다).
-
==============================
7.2018-05 현재, 적어도 파이썬 3에서는 디코드로 직접 처리됩니다.
2018-05 현재, 적어도 파이썬 3에서는 디코드로 직접 처리됩니다.
유효하지 않은 시작 바이트 및 유효하지 않은 연속 바이트 유형 오류가 발생한 후 아래 스 니펫을 사용하고 있습니다. 오류 = '무시'를 추가하면 해결됩니다.
with open(out_file, 'rb') as f: for line in f: print(line.decode(errors='ignore'))
-
==============================
8.앞에서 설명한 모든 해결책을 시도한 후에도 여전히 동일한 오류가 발생하면 파일을 CSV로 내보낼 수 있습니다 (이미있는 경우 두 번째 시도). 특히 scikit learn을 사용하는 경우 데이터 세트를 CSV 파일로 가져 오는 것이 가장 좋습니다.
앞에서 설명한 모든 해결책을 시도한 후에도 여전히 동일한 오류가 발생하면 파일을 CSV로 내보낼 수 있습니다 (이미있는 경우 두 번째 시도). 특히 scikit learn을 사용하는 경우 데이터 세트를 CSV 파일로 가져 오는 것이 가장 좋습니다.
나는 몇 시간을 함께 보낸 반면, 해결책은 간단했다. CSV로 파일을 Anaconda 또는 분류기 도구가 설치된 디렉토리로 내보내고 시도하십시오.
-
==============================
9.aaronpenne 및 Soumyaansh에 의해 영감을 얻은
aaronpenne 및 Soumyaansh에 의해 영감을 얻은
f = open("file.txt","rb") text = f.read().decode(errors='replace')
-
==============================
10.일반적으로 말해서,
일반적으로 말해서,
잘못된 유형의 객체를 파일로 읽으려고하면 Python에서 이러한 오류가 발생합니다.
e.
file = open ( "xyz.pkl", "r") 텍스트 = file.read ()
두 번째 줄은 위의 오류를 throw합니다.
UnicodeDecodeError : 'utf-8'코덱은 0 위치의 바이트 0x80을 디코딩 할 수 없습니다 : 잘못된 시작 바이트
유사한 방식으로 .npy를 읽는 것은 이런 종류의 오류를 던질 것입니다.
-
==============================
11.필자의 경우, xslx excel 파일을 CSV (쉼표로 구분)로 저장하면 오류가 표시됩니다. 그러나 CSV (MS-DOS)로 저장할 때 오류가 발생하지 않습니다.
필자의 경우, xslx excel 파일을 CSV (쉼표로 구분)로 저장하면 오류가 표시됩니다. 그러나 CSV (MS-DOS)로 저장할 때 오류가 발생하지 않습니다.
-
==============================
12.HitHere, "GoogleNews-vectors-negative300.bin.gz"파일을 처음로드 한 다음 우분투에서이 명령으로 추출해야합니다 : gunzip -k GoogleNews-vectors-negative300.bin.gz. [수동 추출은 절대로 권장되지 않습니다.]
HitHere, "GoogleNews-vectors-negative300.bin.gz"파일을 처음로드 한 다음 우분투에서이 명령으로 추출해야합니다 : gunzip -k GoogleNews-vectors-negative300.bin.gz. [수동 추출은 절대로 권장되지 않습니다.]
둘째, python 3에서 다음 명령을 적용해야합니다.
import gensim model = gensim.models.Word2Vec.load_word2vec_format('./model/GoogleNews-vectors-negative300.bin', binary=True)
유용하게 사용되기를 바랍니다.
from https://stackoverflow.com/questions/22216076/unicodedecodeerror-utf8-codec-cant-decode-byte-0xa5-in-position-0-invalid-s by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파이썬 2.6에서 쓰레드 안전 프린트를 얻으려면 어떻게해야합니까? (0) | 2018.10.12 |
---|---|
[PYTHON] Selenium Python API 바인딩을 사용하여 Chrome에서 console.log 출력 얻기 (0) | 2018.10.12 |
[PYTHON] 파이썬에서 명시적인 '자아'를 피하는 법? (0) | 2018.10.12 |
[PYTHON] Paramiko에서 대화식 명령 실행하기 (0) | 2018.10.12 |
[PYTHON] keypress를 읽는 파이썬 방법? (0) | 2018.10.12 |