python中文亂碼問題深入分析

python中文亂碼問題深入分析

ID:20389857

大?。?8.88 KB

頁數(shù):8頁

時間:2018-10-10

python中文亂碼問題深入分析_第1頁
python中文亂碼問題深入分析_第2頁
python中文亂碼問題深入分析_第3頁
python中文亂碼問題深入分析_第4頁
python中文亂碼問題深入分析_第5頁
資源描述:

《python中文亂碼問題深入分析》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。

1、python中文亂碼問題深入分析一直以來,python屮的中文編碼就是一個極為頭人的問題,經(jīng)常拋出編碼轉(zhuǎn)換的異常,python中的str和Unicode到底足一個什么爾西呢?在本文中,以’吩’來解釋作示例解釋所有的問題,“哈”的各利1編碼如卜:1.UNICODE(UTE8-16),C854;2.UTF-8,E59388;3.GBK,B9FE。一、python中的str和Unicode一直以來,python中的中文編碼就是一個極為失大的問題,經(jīng)常拋出編碼轉(zhuǎn)換的界常,python中的str和Unicode到底是?一個什么東西呢?在python中提到Unicod

2、e,—?般指的是Unicode對象,例如’哈哈’的Unicode對象為u’u54c8u54c8’而str,是一個字7Vf數(shù)組,這個字節(jié)數(shù)組表示的是對Unicode對象編碼(可以是utf-8、gbk、cp936、GB2312)p的存儲的格式。這里它僅僅是一個字節(jié)流,沒冇其它的含義,如果你想使這個字節(jié)流敁示的內(nèi)容有意義,就必須用正確的編碼格式,解碼兄示。例如:?>SU=u、嗜嗜,>>>s_utf8=su.encodeutf-8f>?>s_utf8Jxe5x93x88xe5x93x88J>>>prints_utf8銷堝樨>>>s_gbk=su.e

3、ncodegbkJ>?>s_gbk'xb9xfexb9xfeJ>>>prints_gbk哈哈>>>printsu哈哈個字節(jié)數(shù)組,存放的就是’xe5x93x88xe5x93x88’,但是這僅僅是一個字節(jié)數(shù)組,如果你想將它通過print語化輸出成哈哈,那你就失望了,為什么呢?因為print語句它的實現(xiàn)足將要輸出的內(nèi)界傳送/操作系統(tǒng),操作系統(tǒng)會根據(jù)系統(tǒng)的編碼對輸入的字節(jié)流進(jìn)行編碼,這就解釋了為什么utf-8格式的字符屯“哈哈”,輸出的是“鍋堝褲”,因為’xe5x93x88xe5V93x88’HjGB2312去解釋,其顯示的出來就是“

4、鍋堝樨”。這里再強調(diào)-下,str記錄的是字節(jié)數(shù)纟II,只是某種編碼的存儲格式,至于輸出到文件或是打印ili來是什么格式,完傘取決于其解碼的編碼將它解碼成什么樣子。這垠再對print進(jìn)行一/、(補充說明:當(dāng)將一個Unicode對象傳給print時,在內(nèi)部會將該unicode對象進(jìn)行-?次轉(zhuǎn)換,轉(zhuǎn)換成本地的默汄編碼(這僅是個人猜測)二、str和Unicode對象的轉(zhuǎn)換str和Unicode對象的轉(zhuǎn)換,通過encode和decode實現(xiàn),具體使用如下:>>>print鍋禍Ws.decode.encodeutf-8J>將GBK’哈哈’轉(zhuǎn)換成Unico

5、de,然后冉轉(zhuǎn)換成UTE8三、SetdefaultencodingTypeMhelp’"copyright",’’credits’’or"license"formoreinformation.?>s=,哈哈、〉>〉s.encodeTraceback",line1,in〈module〉IJnicodeDecodeError:JasciiJcodeccanJtdecodebyte0xb9inposition0:ordinalnotinrange<128〉>>>importsy

6、s〉>〉reload〈noduleJsysJ〈built-in〉〉>>>sys.setdefaultencoding>>s-encodeutf-8,>Jxe5x93x88xe5x93x88J?>如上圖的演示代碼所示:當(dāng)把s(gbk字符串)直接編碼成utf-8的吋候,將拋出異常,但足通過調(diào)川如下代碼:importsysreload(sys)sys.setdefaultencodingCgbk')后就可以轉(zhuǎn)換成功,為什么呢?在python中str和Unicode在編碼和解碼過程中,如果將一個str直接編碼成W—種編碼,會

7、先把str解碼成imicode,采用的編碼為默認(rèn)編碼,一般默認(rèn)編碼是anscii,所以在上面示例代碼中笫一次轉(zhuǎn)換的時候會出錯,當(dāng)設(shè)定當(dāng)前默認(rèn)編碼為’gbk’后,就不會出錯了。至于代10&(1(373)是因為?71:110112.5初始化后會刪除sys.setdefaultencoding這個方法,我們需耍重新載入。四、操作不同文件的編碼格式的文件建立一個文件test,txt,文件格式用ANSI,內(nèi)容為:abc中文用python來讀取#coding=gbkprintopen(〃Test.txt〃).read()結(jié)果:abc中文把文件格式改成口T8:結(jié)果:ab

8、c涓構(gòu)顯然,這垠需耍解碼:#coding=gbkimportcod

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。