Python 编码和 json 转储

标签 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 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/

相关文章:

python - 在 Django Rest Framework 中保持登录

python - argparse 子解析器帮助显示

Python3递归,避免变量更改以在不同的递归调用中全局反射(reflect)

python - Nonetype 对象不可下标

python - 如何从 unicode 文字创建 unicode 实例

python - 让一个令人困惑的复杂 mysql 请求工作

python - 如何在pygame中更改一段文本的颜色

database - 使用 python 删除 oracle 表中的所有行需要无限的时间

django model.charfield - unicode 或非 unicode

php - 根据编码翻译 IMAP 正文