python2.7中的編碼問題

Python 中的編碼問題,主要是涉及到中文問題

在sublime編輯器中,編碼問題涉及到源文件的編碼和代碼中的編碼問題。

sublime編輯器,源文件默認是ascii編碼,寫入中文文字會報編碼錯誤,因此很多源文件中第一行會指定特定源文件的編碼類型,例如# -*- coding: utf-8 -*- 

python中字符串的編碼與解碼,主要涉及到兩個字符串函數encode 和 decode

python中的str類型都是對應特定編碼類型的,比如utf-8、gbk等,比如“中文”在不同的編碼類型下str字符串對應的字節碼是不同,因爲相同的字符,不同的編碼規則,對應的字節是不同的。

# -*- coding: utf-8 -*-
# 中文
import sys
s = "中文"
b = s.decode('utf-8')
print type(b)
c = b.encode('utf-8')
d = b.encode('gbk')
print list(bytearray(c))
print list(bytearray(d))
print sys.stdout.encoding
print s
輸出:
<type 'unicode'>
[228, 184, 173, 230, 150, 135]
[214, 208, 206, 196]
utf-8
中文
python2.7中字符串str類型是對應特定編碼類型的字節碼的,爲了實現了多種不同編碼類型的字符串的轉換,python2.7引入了unicode編碼類型,作爲不同編碼類型的字符串的轉換的中介。

所以就出現了,特定編碼的str類型的對象按照它的編碼類型進行decode成unicode類型的對象,然後unicode對象在按照特定編碼類型在encode成str對象,實現了不同的編碼類型str對象的轉換。unicode可以作爲中介的原因在於它支持所有字符的編碼。

還有就是print字符串的時候出現的編碼錯誤問題。原因在於sys.stdout.encoding。print 後面跟的字符串對象的編碼類型一定要與sys.stdout.encoding所指定的一致,不一致就會出現編碼錯誤,原因在於,打印字符的時候,按照默認的編碼類型無法解析其他編碼類型的字節。例如,在上面的代碼中添加print d會出錯。因爲d的編碼類型是gbk。所以這就是爲啥涉及到字符串中有中文的時候,使用print打印出現看看的時候出現編碼錯誤的原因。

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