python Unicode轉ascii碼的一種方法


緣起

看到這樣的數據:Marek Čech、Beniardá怎樣變成相對應的ascii碼呢

 

解決

import unicodedata
s = u"Marek Čech"   #(u表示是unicode而非 ascii碼,不加報錯!)
line = unicodedata.normalize('NFKD',s).encode('ascii','ignore')
print line

結果

  Marek Cech

 

python 2.* 中文編碼問題

問題要從文字的編碼講起。原本的英文編碼只有0~255(28),剛好是8位1個字節。為了使計算機表示各種不同的語言,1個字節是大大不夠的,自然要進行擴充。中文的話有GB系列、UTF-8,那么,它們之間是什么關系呢?

 

Unicode是一種編碼方案,又稱萬國碼,可見其包含之廣。但是具體存儲到計算機上,並不用這種編碼,而是用自身默認的編碼方式,utf-8是互聯網上使用的最廣的一種Unicode的實現方式。UTF-8或者gbk也可以進行解碼(decode)還原為Unicode。

 

在python中Unicode是一類對象,表現為以u打頭的,比如u'中文',而string又是一類對象,是在具體編碼方式下的實際存在計算機上的字符串。比如utf-8編碼下的'中文'和gbk編碼下的漢字“中華”,並不相同。例如

 

設計python的幾個函數

encode():編碼
decode():解碼
repr():返回一個可以用來表示對象的可打印的字串

 

默認編碼問題

復制代碼
#coding: gbk 

str1 = '汗'
print repr(str1)

str2 = u'汗'
print repr(str2)
str3 = str2.encode('utf-8')
str4 = str2.encode('gbk')
print repr(str3)
print repr(str4)
str5 = str3.decode('utf-8') 
print repr(str5)
復制代碼

執行程序出現問題:

說gbk編碼器不能解碼。原因是何?看看自己的linux配置,用命令“locale”

其中,與中文輸入關系最密切的就是 LC_CTYPE, LC_CTYPE 規定了系統內有效的字符以及這些字符的分類,諸如什么是大寫字母,小寫字母,大小寫轉換,標點符號、可打印字符和其他的字符屬性等方面。而locale定義zh_CN中最最重要的一項就是定義了漢字(Class “hanzi”)這一個大類,當然也是用Unicode描述的,這就讓中文字符在Linux系統中成為合法的有效字符,而且不論它們是用什么字符集編碼的。

簡單說:程序中寫了個str1 = '汗',默認編碼是utf-8,當賦予變量str1的時候,因為此時設定的編碼為gbk,驢唇不對馬嘴,編碼與解碼不一致,導致解碼錯誤。

修改如下(左),結果(右)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM