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()
답변
read_csv()
명령 에서 다른 코덱 패키지를 정의하여 간단히 전환했습니다 .
encoding = 'unicode_escape'
예 :
import pandas as pd
data = pd.read_csv(filename, encoding= 'unicode_escape')
답변
아래 코드 스 니펫을 사용해보십시오.
with open(path, 'rb') as f:
text = f.read()
답변
문자열에 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'
이제 당신이 가지고 Unicode
안전하게으로 인코딩 할 수 있습니다 utf-8
.
답변
read 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")
답변
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'))