2009-05-01 38 views
0

在python中,字符串可以是unicode(包括utf-16和utf-8),也可以是具有不同編碼(cp1251,cp1252等)的單字節字符串。是否有可能檢查什麼編碼字符串是?例如,python中的字符串編碼

time.strftime("%b") 

將返回一個月份文本名稱的字符串。在MacOS下,返回的字符串將是utf-16,在英文本地Windows下,它將是單字節ASCII編碼,而在非英文語言環境的Windows下,它將通過本地代碼頁編碼,例如cp1251。我如何處理這樣的字符串?

+0

既然你不需要做任何獨特的或不同於「處理這樣的字符串」的東西,你的問題是什麼? – 2009-05-01 10:54:27

回答

5

字符串沒有任何編碼信息存儲,你只需要指定一個,當你轉換到/從Unicode或打印輸出設備:

import locale 
lang, encoding = locale.getdefaultlocale() 
mystring = u"blabla" 
print mystring.encode(encoding) 

UTF-8是 unicode的,這是一個編碼的unicode轉換爲單字節字符串。

最好的做法是在python端隨處使用unicode,使用unicode可逆編碼(如UTF-8)存儲您的字符串,並僅將用戶輸出轉換爲花哨的語言環境。

1

字符集編碼檢測非常複雜。

但是,您對此的真正目的是什麼? 如果你只是想值是Unicode,簡單的寫

unicode(time.strftime("%b")) 

,它應該爲您在上面提到的所有情況:

  • MAC OS:統一(統一) - >的unicode
  • 贏/英文:unicode的(ASCII) - >的unicode
  • 贏/ noneng:unicode的(some_cp) - >將由本地CP轉化 - >的unicode
1

如果在未知編碼中有相當長的字符串,可以嘗試猜測編碼,例如:與通用編碼檢測器在https://github.com/dcramer/chardet - 當然不是萬無一失,但有時它猜對了;-)。但對於很短的字符串來說,這並沒有多大幫助。