2013-03-19 66 views

回答

3

什麼@Thanakon指出,簡單是正確的:你可以在的Unicode做到這一點字符串

你問過爲什麼儘管Python對「窄」字符串沒有這樣做。原因是:Unicode是一個真正的龐大的的東西 - 在內存和處理方面。這絕對不是微不足道的。看看Unicode的定義或ICU Library的實現。

當Python被構思出來時,早在90年代初,字符串的Unicode並不是一個大問題。對於Python社區向後兼容性一直是一個大問題。因此,在某些2.x版本中做「在窄字符串上進行unicode升級」會非常困難。

但是其他人在2000年代對這個解決方案並不滿意,所以他們發明了新數據類型unicode。如果您將數據放在那裏,您將獲得完整的Unicode功能。還有其他模塊,以方便您...

哦,順便說一句:你顯示的窄字符串必須是解釋代碼頁之前它是有道理的unicode-ish。當你的字符串顯示這裏是許多編碼解釋一個(ISO-8859-1,也許?)

但現在的好東西:在的Python 3他們決定它的價值,打破向後兼容性。默認字符串然後一個Unicode字符串!當你在Python 3中編寫'hello'時,它與Python 2 u'hello'中的相同。並且你可以獲得Unicode功能。

無論哪種方式,在Python 2 u'blah'或Python 3 'blah'你必須確保蟒蛇文件是保存在UTF-8(或類似)。在Python 3中,它是standard encoding*.py -files,在Python 2中,您必須包含文件編碼的add an header-line# -*- coding: utf-8 -*-,或者確保編輯器編寫UTF-8 BOM mark

10

在默認情況下使用Unicode的Python 3中,它應該可以工作。

在Python 2,你必須強迫它,這將這樣的伎倆:

u'ô TRAM'.upper() 

u防止翻譯成ASCII文本。 (其餘爲Unicode)

3

你標記你的問題作爲unicode,但你永遠不使你的unicode字符串:

>>> print u'ô TRAM'.upper() 
Ô TRAM 
>>> print 'ô TRAM'.upper() 
ô TRAM 
相關問題