python u'\u00b0' returns u'\xb0'。为什么?

python u'\u00b0' returns u'\xb0'. Why?

我用的是python2.7.10.

关于处理字符编码,在阅读了大量有关该主题的堆栈溢出等内容之后,我遇到了这种对我来说很奇怪的行为。 Python 解释器输入

>>>u'\u00b0'

产生以下输出:

u'\xb0'

我可以使用 dos window、空闲控制台和 wing-ide python shell.

重复此行为

我的假设(如果我错了请纠正我): "degree symbol" 有 unicode 0x00b0,utf-8 代码 0xc2b0,latin-1 代码 0xb0。 Python 文档说,带有 u 前缀的字符串文字是使用 unicode 编码的。

问题:为什么将结果转换为具有与 latin-1 编码匹配的字节转义序列的 unicode 字符串文字,而不是保留 unicode 转义序列?

在此先感谢您的帮助。

Python 使用一些规则来确定每个字符从 repr 输出什么。 0x0080 到 0x00ff 范围内的 Unicode 字符代码点的规则是使用序列 \xdd 其中 dd 是十六进制代码,至少在 Python 2. 没有办法改变它。在Python3中,所有可打印的字符将不转换为十六进制代码显示。

至于为什么看起来像Latin-1编码,是因为Unicode是以Latin-1为基础开始的。直到 0xff 的所有代码点都与其对应的 Latin-1 匹配。