Python 中文編碼介紹

Python內部使用的是unicode編碼,而外部卻要面對千奇百怪的各種編碼,比如作爲中國程序經常要面對的gbk,gb2312,utf8等,這些編碼需要轉換成內部的unicode編碼格式後,Python纔可以處理;

源代碼文件作爲文本文件以某種編碼形式存儲代碼的,Python默認會認爲文件是ASCI編碼,比如說代碼中有一個變量賦值:

s1=’a’ 
print s1

Python認爲這個’a'就是一個asci編碼的字符。但是如果用了中文,比如:

s1=’哈’ 
print s1

這個代碼文件被執行時編碼會出問題。python默認將代碼文件內容當作asci編碼處理,但asci編碼中不存在中文,因此拋出異常。

這時需要讓python知道文件中使用的是什麼編碼形式,對於中文,可以用的常見編碼有utf-8,gbk和gb2312等。只需在代碼文件的最前端添加如下:

# -*- coding: 編碼格式 -*- 

eg:# -*- coding: UTF-8 -*- 

告知python我這個文件裏的文本是用utf-8編碼的,這樣,python就會依照utf-8的編碼形式解讀其中的字符,然後轉換成unicode編碼內部處理使用。

如果在Windows控制檯下運行此代碼的話,雖然程序是執行了,但屏幕上打印出的卻不是哈字。這是由於python編碼與控制檯編碼的不一致造成的。Windows下控制檯中的編碼使用的是gbk,而在代碼中使用的utf-8,python按照utf-8編碼打印到gbk編碼的控制檯下自然就會不一致而不能打印出正確的漢字。

解決辦法一個是將源代碼的編碼也改成gbk,也就是代碼第一行改成:

# -*- coding: gbk -*-

另一種方法是保持源碼文件的utf-8不變,而是在’哈’前面加個u字,也就是:

s1=u’哈’ 
print s1

這樣就可以正確打印出’哈’字了。

u表示將後面跟的字符串以unicode格式存儲。python會根據代碼第一行標稱的utf-8編碼識別代碼中的漢字’哈’,然後轉換成unicode對象。

type(‘哈’)   print str 
type(u’哈’)   print unicode

Python在向控制檯輸出unicode對象的時候會自動根據輸出環境的編碼進行轉換,但如果輸出的不是unicode對象而是普通字符串,則會直接按照字符串的編碼輸出字符串,從而出現上面的現象。

使用unicode對象的話,除了這樣使用u標記,還可以使用unicode類以及字符串的encode和decode方法。

unicode類的構造函數接受一個字符串參數和一個編碼參數,將字符串封裝爲一個unicode,比如在這裏,由於我們用的是utf-8編碼,所以unicode中的編碼參數使用’utf-8′將字符封裝爲unicode對象,然後正確輸出到控制檯:

s1=unicode(‘哈’, ‘utf-8′) 
print s1

decode函數是將一個普通字符串解碼爲unicode對象。

encode函數是將一個unicode對象編碼爲參數中編碼格式的普通字符,

decode是將普通字符串按照參數中的編碼格式進行解析,然後生成對應的unicode對象,比如在這裏我們代碼用的是utf-8,那麼把一個字符串轉換爲unicode就是如下形式:

s2=’哈’.decode(‘utf-8′) #把“哈”按照utf-8的格式,轉換爲Unicode

s3=unicode(‘哈’, ‘utf-8′).encode(‘utf-8′)  #把Unicode的字符轉化爲utf-8的字符

type(‘哈’)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章