python u'\ u00b0'返回你'\ xb0'。为什么?

时间:2016-09-22 15:00:01

标签: python unicode character-encoding python-2.x string-literals

我使用的是python 2.7.10。

在处理字符编码时,在阅读了很多关于主题的堆栈溢出等之后,我遇到了这种看起来很奇怪的行为。 Python解释器输入

>>>u'\u00b0'

产生以下输出:

u'\xb0'

我可以使用dos窗口,空闲控制台和wing-ide python shell重复此行为。

我的假设(如果我错了,请纠正我): “度符号”具有unicode 0x00b0,utf-8代码0xc2b0,latin-1代码0xb0。 Python文档说,带有u-prefix的字符串文字使用unicode进行编码。

问题:为什么结果转换为带有与latin-1编码匹配的byte-escape-sequence的unicode-string-literal,而不是持久化unicode转义序列?

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

Python使用一些规则来确定每个字符从\xdd输出的内容。 0x0080到0x00ff范围内的Unicode字符代码点的规则是使用序列dd,其中public class Facade { private final Dll dll; public Facade(int foo, int bar) { //init the Facade this.dll = new Dll(); } int foo(int bar) {} // more methods } public class Wrapper { public final Facade facade; public Wrapper(Facade facade) { this.facade = facade; } } public static class App { public static int main(String[] args) { Facade fac = new Facade(0,0); Wrapper pointerSim = new Wrapper(fac); methodA(pointerSim); methodB(pointerSim); } } 是十六进制代码,至少在Python 2中。没有办法改变它。在Python 3中,将显示所有可打印字符而不转换为十六进制代码。

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