示例代码:
>>> import json
>>> json_string = json.dumps("??? ????")
>>> print json_string
"\u05d1\u05e8\u05d9 \u05e6\u05e7\u05dc\u05d4"
Run Code Online (Sandbox Code Playgroud)
问题是:它不是人类可读的.我(智能)用户想要使用JSON转储验证甚至编辑文本文件.(我宁愿不使用XML)
有没有办法将对象序列化为utf-8 json字符串(而不是\ uXXXX)?
这没有帮助:
>>> import json
>>> json_string = json.dumps("??? ????")
>>> print json_string
"\u05d1\u05e8\u05d9 \u05e6\u05e7\u05dc\u05d4"
Run Code Online (Sandbox Code Playgroud)
这工作,但如果任何子对象是python-unicode而不是utf-8,它将转储垃圾:
>>> import json
>>> json_string = json.dumps("??? ????")
>>> print json_string
"\u05d1\u05e8\u05d9 \u05e6\u05e7\u05dc\u05d4"
Run Code Online (Sandbox Code Playgroud) 我正在编写一个使用json来表示其资源的web服务,我有点想到编写json的最佳方法.阅读json rfc(http://www.ietf.org/rfc/rfc4627.txt)显然首选的编码是utf-8.但rfc还描述了一种用于指定字符的字符串转义机制.我假设这通常用于转义非ascii字符,从而使得得到的utf-8有效ascii.
所以,假设我有一个json字符串,其中包含非ascii的unicode字符(代码点).我的webservice应该只是utf-8编码并返回它,还是应该逃脱所有那些非ascii字符并返回纯ascii?
我希望浏览器能够使用jsonp或eval执行结果.这会影响决定吗?我对各种浏览器对utf-8的javascript支持的了解很少.
编辑:我想澄清一下,我对如何对结果进行编码的主要关注点是关于结果的浏览器处理.我读过的内容表明,特别是在使用JSONP时,浏览器可能对编码很敏感.我没有找到关于这个主题的任何非常好的信息,所以我将不得不开始做一些测试,看看会发生什么.理想情况下,我只想逃避所需的几个字符,只需对utf-8进行编码即可.
我试图防止valuePOST 请求中的字符串(在本例中为变量)被转义,因为它存储在 JSON 中。我的代码是
def addProduct(request):
if request.POST:
post = {}
for key in request.POST:
value = request.POST[key].encode('utf-8')
try:
value = json.loads(value).encode('utf-8')
except Exception:
pass
post[key] = value.encode('utf-8')
doc = json.dumps(post)
Run Code Online (Sandbox Code Playgroud)
我可以看到的调试value是 unicode 类型,我相信这就是 Django 处理请求对象的方式。实际的字符串,尽管 unicode 在 之前不会对其特殊字符进行转义post[key] = value。如果我尝试更改此设置post[key] = value.encode('utf-8')以防止它被转义,则会收到错误:'ascii' codec can't decode byte 0xe2 in position 38: ordinal not in range(128)
有任何想法吗?
我有一个 python 3 脚本,应该从 .csv 文件获取一些数据并将其写入 json 文件。\n在我的处理过程中,编码是正确的,因此德语元音 \xc3\xbc、\xc3\xa4 或度数符号\xc2\xb0 就像它们一样(#coding=cp1252 在头部)。
\n但是当我通过 json.dump() 编写字典时,编码消失了......
\n如何使用正确的编码将字典写入 json 文件?
\n\n# -*- coding: cp1252 -*-\nimport json\nfrom pandas import read_csv\n\nx={"\xc3\xa4\xc3\xb6": "\xc3\xbc\xc2\xb0"}\nprint(x, json.dumps(x, indent=4))\n\n>>>> {\'\xc3\xa4\xc3\xb6\': \'\xc3\xbc\xc2\xb0\'} {"\\u00e4\\u00f6": "\\u00fc\\u00b0"}\nRun Code Online (Sandbox Code Playgroud)\n