Python print編碼轉(zhuǎn)變默認編碼
Python print編碼有很多的應(yīng)用范圍,在這里我們先來看看如何進行默認編碼轉(zhuǎn)變成為系統(tǒng)編碼。希望大家有所收獲。什么情況用encode,什么情況又是decode呢,剛開始總是被搞昏。
其實各種本地字符集的英文名是Coded Character Set,要轉(zhuǎn)換為Coded,肯定是要encode了,同樣,從里面解出來也應(yīng)該叫decode……
decode就是把其他編碼轉(zhuǎn)換為unicode,等同于unicode函數(shù);encode就是把unicode編碼的字符串轉(zhuǎn)換為特定編碼。在pyshell里繼續(xù):
a是Str類型的,所以再用encode會報錯。用print輸出時會調(diào)用默認編碼轉(zhuǎn)換為系統(tǒng)編碼?
Python print編碼
- >>> a.decode("gb2312")
- u'\u6211'
- >>> print a.decode("gb2312")
- >>> a.encode("gb2312")
- Traceback (most recent call last):
- File "<input>", line 1, in ?
- UnicodeDecodeError: 'ascii' codec can't decode byte 0xce in
position 0: ordinal not in range(128)
b是unicode類型,打印時需要先encode(編碼)成系統(tǒng)編碼
Python 代碼
- >>> print b.encode("gb2312")
- >>> b.encode("gb2312")
- '\xce\xd2'
- >>> b.decode("gb2312")
- Traceback (most recent call last):
- File "<input>", line 1, in ?
- UnicodeEncodeError: 'ascii' codec can't encode character
u'\u6211' in position 0: ordinal not in range(128)
Python print編碼里默認的encode和decode是strict模式,所以會直接拋出Error,而Java里是默認replace模式,所以在處理servlet時經(jīng)常會看到一串?????在decode時傳入第二個參數(shù)errors為'replace'可以和Java相同,但總是沒成功,還不知道為什么。
【編輯推薦】