如何將Unicode字符串(包含額外的字符,如£$等)轉換爲Python字符串? html
title = u"Klüft skräms inför på fédéral électoral große" import unicodedata unicodedata.normalize('NFKD', title).encode('ascii','ignore') 'Kluft skrams infor pa federal electoral groe'
這是一個例子: python
>>> u = u'€€€' >>> s = u.encode('utf8') >>> s '\xe2\x82\xac\xe2\x82\xac\xe2\x82\xac'
好吧,若是您願意/準備切換到Python 3(這可能不是因爲與某些Python 2代碼的向後不兼容),那麼您就沒必要進行任何轉換。 Python 3中的全部文本都用Unicode字符串表示,這也意味着再也不使用u'<text>'
語法。 實際上,您還有字節字符串,用於表示數據(能夠是編碼字符串)。 函數
http://docs.python.org/3.1/whatsnew/3.0.html#text-vs-data-instead-of-unicode-vs-8位 編碼
(固然,若是您當前正在使用Python 3,則問題可能與您嘗試將文本保存到文件中有關。) spa
若是您有Unicode字符串,而且想要將其寫入文件或其餘序列化形式,則必須首先將其編碼爲能夠存儲的特定表示形式。 有幾種常見的Unicode編碼,例如UTF-16(大多數Unicode字符使用兩個字節)或UTF-8(1-4個字節/代碼點,取決於字符)等。要將該字符串轉換爲特定的編碼,您能夠能夠使用: 翻譯
>>> s= u'£10' >>> s.encode('utf8') '\xc2\x9c10' >>> s.encode('utf16') '\xff\xfe\x9c\x001\x000\x00'
能夠將此原始字節字符串寫入文件。 可是,請注意,在讀回它時,您必須知道它所使用的編碼,並使用相同的編碼對其進行解碼。 code
寫入文件時,您能夠使用編解碼器模塊擺脫此手動編碼/解碼過程。 所以,要打開將全部Unicode字符串編碼爲UTF-8的文件 ,請使用: orm
import codecs f = codecs.open('path/to/file.txt','w','utf8') f.write(my_unicode_string) # Stored on disk as UTF-8
請注意,正在使用這些文件的任何其餘文件,若是要讀取它們,都必須瞭解文件的編碼格式。 若是您是惟一一個進行讀/寫的人,那麼這不是問題,不然請確保以一種其餘任何使用該文件的方式均可以理解的形式書寫。 htm
在Python 3中,這種形式的文件訪問是默認的,而且內置的open
函數將採用編碼參數,而且始終以文本模式打開的文件向Unicode字符串(Python 3中的默認字符串對象)轉換。 對象
若是不須要翻譯非ASCII字符,則能夠使用編碼爲ASCII:
>>> a=u"aaaàçççñññ" >>> type(a) <type 'unicode'> >>> a.encode('ascii','ignore') 'aaa' >>> a.encode('ascii','replace') 'aaa???????' >>>