我不明白的是:爲什麼Python不會用upper()改寫特殊字符?
'ô TRAM'.upper() != 'Ô TRAM'
'ô TRAM'.upper() == 'ô TRAM'
所有文本編輯器(包括vim
和emacs
)轉換「O TRAM'.upper(),以 'O TRAM' 當我們問upcase。爲什麼Python似乎只能提升[a-zA-Z]個字符?解決方法是什麼?
我不明白的是:爲什麼Python不會用upper()改寫特殊字符?
'ô TRAM'.upper() != 'Ô TRAM'
'ô TRAM'.upper() == 'ô TRAM'
所有文本編輯器(包括vim
和emacs
)轉換「O TRAM'.upper(),以 'O TRAM' 當我們問upcase。爲什麼Python似乎只能提升[a-zA-Z]個字符?解決方法是什麼?
什麼@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。
在默認情況下使用Unicode的Python 3中,它應該可以工作。
在Python 2,你必須強迫它,這將這樣的伎倆:
u'ô TRAM'.upper()
u
防止翻譯成ASCII文本。 (其餘爲Unicode)
你標記你的問題作爲unicode
,但你永遠不使你的unicode字符串:
>>> print u'ô TRAM'.upper()
Ô TRAM
>>> print 'ô TRAM'.upper()
ô TRAM