Python编码和json转储

Python编码和json转储,python,python-3.x,encoding,Python,Python 3.x,Encoding,如果早些时候有人问过这个问题,我很抱歉。我仍然不清楚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 ro

如果早些时候有人问过这个问题,我很抱歉。我仍然不清楚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'];
我以Json的形式返回消息(out)

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

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


谢谢

您没有做错什么(Python也没有做错)

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

>>> import json
>>> json.dumps({'Crêpes': 5})
'{"Cr\\u00eapes": 5}'
>>> json.loads('{"Cr\\u00eapes": 5}')
{'Crêpes': 5}
不要忘记,json只是数据的一种表示形式,
“ê”
“\\u00ea”
都是字符串
ê
的有效json表示形式。一致的json解析器应该正确处理这两个问题

但可以禁用此行为,请参阅:


关于这一点,设置
确保_ascii=False
在打印输出中呈现特殊字符。另一方面,它仍然是正确的,因为在这些编码中没有丢失任何信息。

“但是,当我预览结果时,我得到的重音e(法语)被替换为\u00e9。”——这听起来很对。你的问题是什么?是的,如果你在python中打印('\u00e9'),它会打印出来,这样表示就正确了。如果您看到的是
\u00e9
,则表示您看到的程序不理解重音。httpResponse将响应打印为\u00e9。我想知道我需要做什么更改,以便响应打印出带重音的e。很酷的副本,谢谢您的澄清。@tkansara:如果您真的想更改默认值,您可以,Python不会阻止您在UTF-8上生成完整的。请参见更改为false putsé而不是带重音的e。有趣。我测试了它,它对我很好。可能是因为我使用了Python3.5。
>>> import json
>>> json.dumps({'Crêpes': 5})
'{"Cr\\u00eapes": 5}'
>>> json.loads('{"Cr\\u00eapes": 5}')
{'Crêpes': 5}
>>> json.dumps({'Crêpes': 5}, ensure_ascii=False)
'{"Crêpes": 5}'