我使用的是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转义序列?
提前感谢您的帮助。
答案 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对应的匹配。