2010-05-01 2 views
1

여기는 며칠이 지나서야 견딜 수있는 아주 간단한 예입니다. 다음 스크립트를 고려 :악센트 (안쪽에 noob 포함)가 들어있는 json 인코딩 된 dict을 출력 할 수 없습니다.

# -*- coding: utf-8 -* 
from json import dumps as json_dumps 

machaine = u"une personne émérite" 
print(machaine) 

output = {} 
output[1] = machaine 
jsonoutput = json_dumps(output) 
print(jsonoutput) 

CLI에서이 결과하는 것은 :

une personne émérite 
{"1": "une personne \u00e9m\u00e9rite"} 

이해가되지 않는 이유는 두 문자열 사이에 그 같은 차이. 나는 모든 종류의 인 코드, 디코드 등을 시도해 왔지만 올바른 방법을 찾을 수없는 것처럼 보입니다. 아무도 아이디어가 있니?

미리 감사드립니다. Matthieu

+0

'é'는 ASCII 문자가 아니기 때문에'\ u00e9'로 인코딩되었습니다. 그게 뭐가 잘못 됐니? – kennytm

답변

3

인코딩에 문제가 없습니다. 그것을 다시로드하고 인쇄하고 올바른 출력을 볼 수 있습니다 :

>>> import json 
>>> jsoninput = json.loads(jsonoutput) 
>>> print jsoninput 
{u'1': u'une personne \xe9m\xe9rite'} 
>>> print jsoninput['1'] 
une personne émérite 
+0

10 억 번 감사드립니다. 내 하루를 만들었습니다 :-) – user296546

2

마르셀로 칸토의 대답은 명확하게하려면 다음 JSON 인코딩을 반환 json.dumps(), 문자 '로 시작, ASCII 문자열입니다 { ', 그리고 당신은 그것을 해독 할 필요가 백 슬래시, 시세, 등을 포함하는 (예를 들어 json.loads()와 데이터로 실제 DICT를 다시 얻을

# -*- coding: utf-8 -* 
import json 

output = {1: u"une personne émérite"} 
print output[1] 

json_encoded = json.dumps(output) 
print "Encoded: %s" % repr(json_encoded) 

input = json.loads(json_encoded) 
print input['1'] 

출력합니다 :.

une personne émérite 
Encoded: '{"1": "une personne \\u00e9m\\u00e9rite"}' 
une personne émérite 
+0

호기심 때문에, 자바 스크립트는 인코딩 된 문자를 어떻게 처리할까요? –

+0

JS가 올바르게 작동합니다. 예 : 브라우저에서 파일로드로이 저장, 당신은 (적어도 내가) 올바른 문자열을 볼 수 :

+0

JSON 인코딩은 ASCII 문자열이 아닙니다. 그것들은 일반적으로 UTF-8로 전송되거나 저장되는 유니 코드 문자열입니다. –

관련 문제