Python默認腳本文件全部由anscii編碼。當文件中有不在ANSCII編碼範圍內的字符時,應該使用“編碼說明”來糾正模塊的定義。如果。py文件包含中文字符(嚴格來說包含非ANSCII字符),需要在第壹行或第二行指定編碼聲明:# -*- coding=utf-8 -*-或# coding。
其他規範如gbk、gb2312也可;否則,將會出現:
先說python中的字符串類型。python中有兩種字符串類型,即str和unicode,都是從basestring派生出來的。
str文檔裏有壹句話:
也就是說,當讀取壹個文件的內容或者從網絡讀取內容時,要保存的對象是str類型;如果要把壹個字符串轉換成特定的編碼類型,需要先轉換成unicode,再從Unicode轉換成特定的編碼類型,比如utf-8,gb2312等。
Unicode轉換成gb2312、utf-8等。,使用編碼。
Utf-8,GBK使用unicode(s,編碼)或s.decode(編碼)轉換為unicode。
普通字符串被轉換成unicode,
如果直接執行s.encode('gb2312 ')會怎麽樣?
這裏會發生壹個異常:Python會先自動把S解碼成unicode,然後再編碼成gb2312。因為解碼是python自動完成的,而且我們沒有指定解碼方法,所以python會使用sys.defaultencoding指定的方法進行解碼。在很多情況下,sys.defaultencoding是ANSCII,如果s不是這種類型,就會出錯。
就拿上面的情況來說,我的sys.defaultencoding是anscii,S的編碼方式和文件壹樣,都是utf8,所以有錯誤:
在這種情況下,我們有兩種方法來糾正錯誤:
S = '中文'
s.decode('utf-8 ')。編碼(' gb2312 ')`'
導入系統
Reload(sys) # Python2.5初始化後會刪除sys.setdefaultencoding方法,我們需要重新加載。
sys.setdefaultencoding('utf-8 ')
Str = '中文'
字符串編碼(' gb2312 ')
打印打開(" Test.txt ")。閱讀()
導入編解碼器
打印打開(" Test.txt ")。閱讀()。解碼(“utf-8”)
回溯(最近壹次呼叫):
文件“ChineseTest.py ”,第3行,在& lt模塊& gt
打印打開(" Test.txt ")。閱讀()。解碼(“utf-8”)
unicode encoded error:“gbk”編解碼器無法對位置0處的字符u“\ ufe ff”進行編碼:非法的多字節序列
導入編解碼器
data = open("Test.txt ")。閱讀()
if數據[:3] ==編解碼器。BOM_UTF8:
數據=數據[3:]
print data.decode("utf-8 ")
S = "中文"
打印unicode(s,“utf-8”)
回溯(最近壹次呼叫):
文件“ChineseTest.py ”,第3行,在& lt模塊& gt
s = unicode(s,“utf-8”)
UnicodeDecodeError錯誤:“utf8”編解碼器無法解碼位置0-1中的字節:無效數據
S = "中文"
打印unicode(s,“gbk”)
S = "中文"
打印unicode(s,“cp936”)