Python编码和json转储

tka*_*ara 5 encoding python-3.x

如果之前已经提出过这个问题我会道歉.我还不清楚python3.2中的编码.

我正在阅读一个csv(用UTF-8编码,没有BOM),我在csv中有法语口音.

这是打开和读取csv文件的代码:

csvfile = open(in_file, 'r', encoding='utf-8')
fieldnames = ("id","locale","message")    
reader = csv.DictReader(csvfile,fieldnames,escapechar="\\") 
for row in reader:
        if row['id'] == id and row['locale'] == locale:
            out = row['message'];
Run Code Online (Sandbox Code Playgroud)

我正在以Json的身份返回消息(out)

jsonout = json.dumps(out, ensure_ascii=True)    
return HttpResponse(jsonout,content_type="application/json; encoding=utf-8")
Run Code Online (Sandbox Code Playgroud)

但是,当我预览结果时,我会将重音e(法语)替换为\ u00e9.

你能告诉我我做错了什么,我应该怎么做,以便json输出显示带有重音的正确e.

谢谢

mar*_*elm 13

你没有做错任何事(也不是Python).

Python的json模块只是采用安全路由并转义非ascii字符.这是在json中表示此类字符的有效方法,并且任何符合标准的解析器在解析字符串时都将恢复正确的Unicode字符:

>>> import json
>>> json.dumps({'Crêpes': 5})
'{"Cr\\u00eapes": 5}'
>>> json.loads('{"Cr\\u00eapes": 5}')
{'Crêpes': 5}
Run Code Online (Sandbox Code Playgroud)

不要忘记,JSON是您的数据只是一种表象,两者"ê""\\u00ea"是字符串的有效的JSON表示ê.符合json解析器应该正确处理.

但是可以禁用此行为,请参阅json.dump文档:

>>> json.dumps({'Crêpes': 5}, ensure_ascii=False)
'{"Crêpes": 5}'
Run Code Online (Sandbox Code Playgroud)