Mar*_*ero 7 python unicode json python-2.7
当使用json.dumps
默认为ensure_ascii
是True
,但我看到自己不断地将它设置为False
如下:
unicode
我需要通过它,否则我会回来str
我需要传递它,所以我的字符不会转换为unicode(在str中编码)您希望在哪种情况下True
?该选项的用例是什么?
来自Docs:
如果ensure_ascii为true(默认值),则输出中的所有非ASCII字符都将使用\ uXXXX序列进行转义,结果是仅包含ASCII字符的str实例.
它有什么好处?
感谢@ user2357112
首先要了解JSON中没有二进制表示.因此,所有字符串都应该是有效的unicode点.如果你正在尝试json.dumps原始字节,你可能会做错事.
然后检查:
ensure_ascii
做两件事.确保输出有效ascii字符(即使它们内部有unicode)并允许该函数返回一个unicode对象.这让我认为:
ensure_ascii=False
它,但实际上将它保留为true并解码str可能更有意义.(根据规范转储不能保证unicode返回,但如果你传递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"' |
+-----------------------+--------------+------------------------------+
Run Code Online (Sandbox Code Playgroud)
注意最后一个值是utf-8编码的unicode到字节.这可能是其他json解码器无法解析的.
此外,如果你混合类型(unicode和str的数组)和使用ensure_ascii=False
你可以得到一个UnicodeDecodeErrror
(当编码到json,mindblending),因为模块将返回一个unicode对象,但它不能使用默认值将str转换为unicode编码(ascii)
归档时间: |
|
查看次数: |
5324 次 |
最近记录: |