如果之前有人问过这个问题,我深表歉意。我仍然不清楚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 返回
jsonout = json.dumps(out, ensure_ascii=True)
return HttpResponse(jsonout,content_type="application/json; encoding=utf-8")
但是,当我预览结果时,我得到重音 e(French) 被替换为\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 解析器应该都能正确处理。不过可以禁用此行为,请参阅
json.dump
documentation :>>> json.dumps({'Crêpes': 5}, ensure_ascii=False)
'{"Crêpes": 5}'
关于Python 编码和 json 转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35582528/