Python编码和json转储
如果早些时候有人问过这个问题,我很抱歉。我仍然不清楚python3.2中的编码 我正在读一个csv(编码为UTF-8,无BOM),csv中有法语口音 以下是打开和读取csv文件的代码: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
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}'