【发布时间】:2013-06-19 19:25:47
【问题描述】:
我想用 UTF-8 编码一个字符串并单独查看相应的 UTF-8 字节。在 Python REPL 中,以下似乎工作正常:
>>> unicode('©', 'utf-8').encode('utf-8')
'\xc2\xa9'
请注意,我在这里使用U+00A9 COPYRIGHT SIGN 作为示例。 '\xC2\xA9' 看起来很接近我想要的——一个由两个单独的代码点组成的字符串:U+00C2 和 U+00A9。 (当 UTF-8 解码时,它会返回原始字符串,'\xA9'。)
然后,我希望将 UTF-8 编码的字符串转换为与 JSON 兼容的字符串。但是,以下似乎没有做我想要的:
>>> import json; json.dumps('\xc2\xa9')
'"\\u00a9"'
请注意,它会生成一个包含 U+00A9(原始符号)的字符串。相反,我需要 UTF-8 编码的字符串,它在有效 JSON 中看起来像 "\u00C2\u00A9"。
TL;DR 如何在 Python 中将 '©' 转换为 "\u00C2\u00A9"?我觉得我遗漏了一些明显的东西——有没有内置的方法可以做到这一点?
【问题讨论】:
-
注意: The results of using
printin the Python REPL depend on the$LANGenvironment variable. 这在测试这样的东西时会带来额外的混乱。 -
这种说法在很多层面上都是错误的。 UTF-8 是一种编码。 Unicode 更像是一个将数字(代码点)映射到符号的数据库。然后这些数字被 UTF-8 等编码使用。确实,与许多其他编码不同,UTF-8 能够编码/解码任何 Unicode 符号——但这并不意味着 UTF-8 是 Unicode。
-
这意味着一件事——将“unicode”转换为“utf-8”没有任何意义。
-
@PavelRadzivilovsky 当然可以。否则,我们为什么需要 UTF-8 编码器/解码器?
-
您拥有它们是因为内部字符串表示可能不是 UTF-8。例如,python 上的 UTF-16。
标签: python json unicode utf-8 escaping