首頁  >  文章  >  後端開發  >  python中轉換模組codecs的講解(附範例)

python中轉換模組codecs的講解(附範例)

不言
不言轉載
2018-10-29 17:13:257404瀏覽

這篇文章帶給大家的內容是關於python中轉換模組codecs的講解(附範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

0、編碼

#編碼轉換時,通常需要以unicode作為中間編碼,也就是先將其他編碼的字串解碼(decode)成unicode ,再從unicode編碼(encode)成另一種編碼。

str1.decode('gb2312')    #将gb2312编码的字符串转换成unicode编码
str2.encode('gb2312')    #将unicode编码的字符串转换成gb2312编码

注意事項:

s=‘中文’ 如果是在utf8的檔案中,該字串就是utf8編碼,如果是在gb2312的檔案中,則其編碼為gb2312。在這種情況下,要進行編碼轉換,都需要先用decode方法轉換成unicode編碼,再使用encode方法轉換成其他編碼。
在沒有指定特定的編碼方式時,都是使用的系統預設編碼所建立的程式碼檔案。
如果字串是這樣定義: s=u’中文’ 則該字串的編碼就被指定為unicode了,即python的內部編碼,而與代碼檔案本身的編碼無關。只需要直接使用encode方法將其轉換成指定編碼即可
如果一個字串已經是unicode了,再進行解碼則將出錯,因此通常要對其編碼方式是否為unicode進行判斷isinstance(s, unicode ) #用來判斷是否為unicode

1、查看編碼方式

(1)對於我們經常使用的記事本,“文件”  ->  “另存為”,可查看到當前的編碼方式。
(2)用notepad 打開,點選「選單列」  ->  「格式」可以檢視到。
(3)UltraEdit:
不同編碼的文本,是根據文本的前兩個字節來定義其編碼格式的,定義如下:

ANSI:        無格式定義;
Unicode:       前兩個位元組為FFFE;
Unicode big endian: 前兩字節為FEFF; 
UTF-8:     前兩字節可以這樣為兩個字節就這樣為兩個字節;判定出文件的具體格式了。

2、python編碼

當python要做編碼轉換的時候,會藉助於內部的編碼,轉換過程是這樣的:

原有編碼-> 內部編碼- > 目的編碼

python的內部是使用unicode來處理的,但是unicode的使用需要考慮的是它的編碼格式有兩種,一是UCS-2,它一共有65536個碼位,另一種是UCS-4,它有2147483648g個碼位。

判斷安裝的python是用什麼編碼方式:

import sys
print(sys.maxunicode)

如果輸出的值為65535,那麼就是UCS-2,如果輸出是1114111就是UCS-4編碼。

轉換成內部碼:

c = "风卷残云"
print(type(c))
c = bytes(c,encoding='utf-8')
print(type(c))
print(c)
b = codecs.decode(c, "utf-8") #与c.decode()等效
print(type(b))
print(b)
print(c.decode())

輸出:

<class &#39;str&#39;>
<class &#39;bytes&#39;>
b&#39;\xe9\xa3\x8e\xe5\x8d\xb7\xe6\xae\x8b\xe4\xba\x91&#39;
<class &#39;str&#39;>
风卷残云
风卷残云

3、codecs模組

codecs專門用來當作編碼轉換。透過它的介面是可以擴展到其他關於程式碼方面的轉換。

在python3.x中可以直接將bytes類型的資料轉換成其他編碼格式,不用手動先轉換成unicode。

import codecs
a = "我爱你"
 # 创建utf-8编码器
look = codecs.lookup(&#39;utf-8&#39;)
type(a)
a = bytes(a,encoding=&#39;utf-8&#39;)
b = look.decode(a) 
print(b)

輸出:

('我爱你', 9)
傳回的元組中b[0]是數據,b[1]是長度。

** 用codecs提供的open方法來指定開啟的檔案的語言編碼,它會在讀取的時候自動轉換為內部unicode**

f = codecs.open(filepath, 'r', 'utf8')
讀取方式有很多種,這裡的f是可以用for迴圈遍歷的,當然也可以直接用readline或readlines函數方法來讀取。

#for i in f:
#    print(i)
#f.readline()
#f.read()
#f.readlines()

以上是python中轉換模組codecs的講解(附範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除