UnicodeDecodeError : '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
여기,
__getdata()
함수는 반환합니다 dictionary {}
.
게시이하기을 질문 전에 나는 질문 OS SO에 대해 언급 했습니다 .
업데이트
다음 줄은 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() })
정확한 방법인지 확실하지 않습니다.
오류는 사전에 ASCII가 아닌 문자가 있기 때문에 인코딩이 가능하기 때문입니다. 를 피하는이 오류 한 가지 간단한 방법 encode()
은 다음과 같은 함수를 사용하여 해당 문자열을 인코딩하는을 구석으로 a
입니다 (비 ASCII있는 문자열 문자가 인 경우 ).
a.encode('utf-8').strip()
아래 코드 스 니펫을 사용합니다.
with open(path, 'rb') as f:
text = f.read()
read_csv()
명령 에서 다른 코덱 패키지를 정의하여 간단히 전환했습니다 .
encoding = 'unicode_escape'
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로 인코딩 할 수 있습니다.
csv를 읽을 때 인코딩 방법을 추가했습니다.
import pandas as pd
dataset = pd.read_csv('sample_data.csv',header=0,encoding = 'unicode_escape')
코드 상단에 기본 설정 설정
import sys
reload(sys)
sys.setdefaultencoding("ISO-8859-1")
aaronpenne과 Soumyaansh에서 영감을 받음
f = open("file.txt","rb")
text = f.read().decode(errors='replace')
2018-05 현재 취소 decode
될 Python 3의 경우 직접 처리 .
후 아래 나는 점점의 조각을 사용하고 있습니다 invalid start byte
및 invalid continuation byte
유형 오류. 추가 errors='ignore'
하여 나를 위해 수정했습니다.
with open(out_file, 'rb') as f:
for line in f:
print(line.decode(errors='ignore'))
다음 줄은 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() })
이를 임시 수정으로 올바른 명령 표시 (확실하지 않음).
위의 방법이 작동하지 않는 경우 csv 파일 자체의 인코딩을 변경하는 것이 좋습니다.
Excel 사용 :
- Excel을 사용하여 CSV 파일 열기
- "파일 메뉴"옵션으로 이동하여 "다른 이름으로 저장"을 클릭합니다.
- 파일을 선택 위치를 선택하십시오 "찾아보기"를 클릭하십시오.
- 원하는 파일 이름을 입력하십시오.
- CSV (쉼표로 구분) (*. csv) 옵션 선택
- "도구"드롭 다운 상자를 클릭하고 "웹 옵션"을 클릭합니다.
- "인코딩"탭의 "이 문서를 다른 이름으로 저장"드롭 다운 목록에서 유니 코드 (UTF-8) 옵션을 선택합니다.
- 파일 저장
메모장 사용 :
- 메모장을 사용하여 CSV 파일 열기
- "파일"> "다른 이름으로 저장"옵션으로 이동합니다.
- 다음으로 파일 위치를 선택하십시오
- 파일 형식 옵션을 모든 파일 ( . ) 로 선택합니다 .
- .csv 상대방로 파일 이름 지정
- "인코딩"드롭 다운 목록에서 UTF-8 옵션을 선택합니다.
- 저장을 클릭하여 파일을 저장하십시오.
이렇게하면 UnicodeCodeError가 발생하지 않고 csv 파일을 수 있습니다.
앞서 언급 한 한 모든 해결 방법을 시도한 후에도 계속 오류가 계속 발생하면 파일을 CSV로 두 번째 발생합니다. 특히 scikit 학습을 사용하는 경우 데이터 세트를 CSV 파일로 가져 오는 것이 가장 좋습니다.
몇 시간을 함께 보냈지 만 해결은 이렇게 간단했습니다. Anaconda 또는 분류기 도구가 일련의 파일을 CSV로 시도하십시오.
'IT' 카테고리의 다른 글
JPA getSingleResult () 또는 널 (0) | 2020.07.11 |
---|---|
범위에서 임의의 이중 생성 (0) | 2020.07.11 |
.resx 파일의 모든 리소스를 반복 (0) | 2020.07.10 |
iPad 브라우저 너비 및 높이 표준 (0) | 2020.07.10 |
Visual Studio에서 조건부 중단 점을 설정하는 방법은 무엇입니까? (0) | 2020.07.10 |