写了感谢@ user2357112
第一件事是了解存在JSON没有二进制表示。因此所有字符串应该是有效的unicode点。如果你正在尝试json.dumps原始字节,你可能会做错了什么。
然后检查:
这使我认为:
- 当你编码文本转换成JSON和您的所有字符串Unicode中它是好的使用
ensure_ascii=False
,但它实际上可能更有意义,它留给真实并解码str。 (根据规范转储不保证unicode回来,但它确实返回它,如果你通过unicode
- 如果你使用str对象,调用ensure_ascii = False将阻止json将你的字符转换为unicode。这一点,但如果你再尝试读取这些浏览器例如奇怪的事情可能会发生
关于如何ensure_ascii影响的结果,这是一个表,可能的帮助。
+-----------------------+--------------+------------------------------+
| Input | Ensure_ascii | output |
+-----------------------+--------------+------------------------------+
| u”汉语” | True | '"\\u6c49\\u8bed"' |
| u”汉语” | False | u'"\u6c49\u8bed"' |
| u”汉语".encode("utf-8")| True | '"\\u6c49\\u8bed"’ |
| u”汉语".encode("utf-8")| False | '"\xe6\xb1\x89\xe8\xaf\xad"' |
+-----------------------+--------------+------------------------------+
注意最后的值是utf-8编码的unicode字节,可能不能被其他json解码器解析ERS。
而且如果混合类型(统一的阵列和STR),并使用ensure_ascii=False
你可以得到一个UnicodeDecodeErrror
(当编码成JSON,mindblending)作为模块将返回你一个Unicode对象,但它不会是能够转换使用默认编码(ascii)将其转换为unicode
“如果我使用unicode,我需要通过它,否则我会恢复” - 无论如何,您可能会收到一个“str”。 'ensure_ascii = False'不保证结果的类型是'unicode'。 – user2357112
“如果我与str一起工作,我需要传递它,以便我的字符不会转换为unicode(在str中编码)” - 您打开允许“unicode”返回值的选项,希望它会*防止*你获得Unicode输出?你确定你明白这件事吗? – user2357112
>>>我假设“返回值可能是unicode实例”意思是如果你通过我unicode我给你unicode,但它可能会不是那样。有什么传递和期望的明确指导? –