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 匹配。
我用的是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 匹配。