2012-09-08 73 views
0

在python:unicode号码是什么?

>>> "\xc4\xe3".decode("gbk").encode("utf-8") 
'\xe4\xbd\xa0' 
>>> "\xc4\xe3".decode("gbk") 
u'\u4f60' 

我们可以得到两个结论:

1. \ XC4 \ XE3在GBK编码= \ XE4 \ XBD \ XA0以UTF-8
2. \ XC4 \ XE3在GBK编码= \ x4f \ X60以Unicode(或说在UCS-2)

在R:

> iconv("\xc4\xe3",from="gbk",to="utf-8",toRaw=TRUE) 
[[1]] 
[1] e4 bd a0 
> iconv("\xc4\xe3",from="gbk",to="unicode",toRaw=TRUE) 
[[1]] 
[1] ff fe 60 4f 

目前,结论1是正确的,它是在作为同蟒蛇如R
结论2是一个谜题,
什么是地球上的\ xc4 \ xe3在gbk编码= ??在unicode。
in python它是u'\ u4f60',在R它是ff fe 60 4f
是等于?哪一个是正确的?它们都是正确的吗?

+9

[绝对最小每个软件开发人员绝对,肯定必须知道Unicode和字符集(没有借口!)](http://www.joelonsoftware.com/articles/Unicode.html) – delnan

+0

[维基百科中的Unicode]( http://en.wikipedia.org/wiki/Unicode):*“Unicode可以通过不同的字符编码实现,最常用的编码是UTF-8,UTF-16和现在已过时的UCS-2 ... 。“* –

+0

这篇维基百科文章讨论了GBK编码。 http://en.wikipedia.org/wiki/GBK本文介绍了Python中的Unicode http://docs.python.org/howto/unicode.html –

回答

6

在python中,\uxxxx表示法是指Unicode代码点,而不是代码点的任何编码

UCS-2,UTF-16,UTF-8能够捕捉那些码点在适于存储在文件中的字节,用于在网络上传送的所有编码等

\u4f60码点中的R表示包括UTF-16 Byte Order Mark或BOM。它表示选择了什么字节顺序,其中0xFFFE表示小端。 Python也包括它,当你编码为UTF-16时:

>>> u'\uf460'.encode('utf16') 
'\xff\xfe`\xf4' 

大端等价物是0xFEFF。你可以明确地编码为utf-16be或蟒蛇,以避免BOM utf-16le被包括在内,因为你已经做出了明确的选择:

>>> u'\uf460'.encode('utf-16be') 
'\xf4`' 
>>> u'\uf460'.encode('utf-16le') 
'`\xf4' 

你真的应该阅读乔尔斯波斯基Unicode文章,以及Python的Unicode HOWTO到更全面地了解Unicode和编码之间的区别。