2012-09-08 74 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和編碼之間的區別。