2013-10-08 7 views
1

JSON 문자열을 받고 있습니다. json.loads를 통해 전달하고 유니 코드 문자열의 배열로 끝납니다. 그게 다 잘되고 잘됐다. 배열의 문자열 중 하나는 :디코드 된 JSON 문자열 인쇄

는 는
u'\xc3\x85sum' 
지금 디코드에게 ('UTF-8')를 사용하여 디코딩 대신 내가 오류 얻을 때 '는 aSum'로 번역해야

:

UnicodeEncodeError: 'charmap' codec can't encode character u'\x85' in position 1: character maps to <undefined> 

테스트를 무슨 잘못 나는 다음과 같은

'Åsum'.encode('utf8') 
'\xc3\x85sum' 

print '\xc3\x85sum'.decode('utf8') 
Åsum 

는 그래서 잘 작동했다, 그러나 나는 그것이 내가 같은 오류가 나올까요 json.loads로 유니 코드 문자열로 만들 경우 :

print u'\xc3\x85sum'.decode('utf8') 
UnicodeEncodeError: 'charmap' codec can't encode character u'\x85' in position 1: character maps to <undefined> 

json.loads (jsonstring, encoding = 'uft8')를 시도했지만 아무 것도 변경되지 않았습니다.

해결 방법이 있습니까? json.loads를 유니 코드로 만들지 않거나, 요청할 때 'utf8'을 사용하여 디코딩하도록하십시오.

편집 :

내가받을 원래 문자열은 다음과 같이 또는 일부 문제가 유발 :

"\\u00c3\\u0085sum" 

답변

1

이미 유니 코드 값이 그렇게 그것이 인코딩을 강제로 디코딩을 시도 먼저 기본 코덱을 사용합니다.

대신 형식이 잘못된 JSON을받은 것 같습니다. JSON 값은 이며 이미 유니 코드입니다. 유니 코드 값으로 UTF-8 데이터가있는 경우, 유일한 방법은 Latin-1 (첫 번째 255 코드 포인트를 일대일 바이트로 매핑)로 인코딩 한 다음 UTF8 형식으로 디코드하는 것입니다.

>>> print u'\xc3\x85sum'.encode('latin1').decode('utf8') 
Åsum 

더 나은 해결책은 JSON 소스를 수정하는 것입니다. UTF-8로 이중 인코딩해서는 안됩니다. 올바른 표현은 다음과 같습니다.

json.dumps(u'Åsum') 
'"\\u00c5sum"' 
+0

감사합니다. – user2858835