今天就跟大家聊聊有關(guān)Python中出現(xiàn)中文亂碼如何解決,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。
成都創(chuàng)新互聯(lián)公司,是成都地區(qū)的互聯(lián)網(wǎng)解決方案提供商,用心服務(wù)為企業(yè)提供網(wǎng)站建設(shè)、手機(jī)APP定制開(kāi)發(fā)、小程序設(shè)計(jì)、系統(tǒng)按需定制開(kāi)發(fā)和微信代運(yùn)營(yíng)服務(wù)。經(jīng)過(guò)數(shù)10年的沉淀與積累,沉淀的是技術(shù)和服務(wù),讓客戶少走彎路,踏實(shí)做事,誠(chéng)實(shí)做人,用情服務(wù),致力做一個(gè)負(fù)責(zé)任、受尊敬的企業(yè)。對(duì)客戶負(fù)責(zé),就是對(duì)自己負(fù)責(zé),對(duì)企業(yè)負(fù)責(zé)。
在Python 中文亂碼中提到unicode,一般指的是unicode對(duì)象,例如'哈哈'的unicode對(duì)象為而str,是一個(gè)字節(jié)數(shù)組,這個(gè)字節(jié)數(shù)組表示的是對(duì)unicode對(duì)象編碼(可以是utf-8、gbk、cp936、GB2312)后的存儲(chǔ)的格式。這里它僅僅是一個(gè)字節(jié)流,沒(méi)有其它的含義,如果你想使這個(gè)字節(jié)流顯示的內(nèi)容有意義,就必須用正確的編碼格式,解碼顯示。
例如:
對(duì)于unicode對(duì)象哈哈進(jìn)行編碼,編碼成一個(gè)utf-8編碼的str-s_utf8,s_utf8就是是一個(gè)字節(jié)數(shù)組,存放的就是'\xe5\x93\x88\xe5\x93\x88',但是這僅僅是一個(gè)字節(jié)數(shù)組,如果你想將它通過(guò)print語(yǔ)句輸出成哈哈,那你就失望了,為什么呢?
因?yàn)閜rint語(yǔ)句它的實(shí)現(xiàn)是將要輸出的內(nèi)容傳送了操作系統(tǒng),操作系統(tǒng)會(huì)根據(jù)系統(tǒng)的編碼對(duì)輸入的字節(jié)流進(jìn)行編碼,這就解釋了為什么utf-8格式的字符串“哈哈”,輸出的是“鍝堝搱”。
因?yàn)?'\xe5\x93\x88\xe5\x93\x88'用GB2312去解釋,其顯示的出來(lái)就是“鍝堝搱”。這里再?gòu)?qiáng)調(diào)一下,str記錄的是字節(jié)數(shù)組,只是某種編碼的存儲(chǔ)格式,至于輸出到文件或是打印出來(lái)是什么格式,完全取決于其解碼的編碼將它解碼成什么樣子。
這里再對(duì)print進(jìn)行一點(diǎn)補(bǔ)充說(shuō)明:當(dāng)將一個(gè)unicode對(duì)象傳給print時(shí),在內(nèi)部會(huì)將該unicode對(duì)象進(jìn)行一次轉(zhuǎn)換,轉(zhuǎn)換成本地的默認(rèn)編碼(這僅是個(gè)人猜測(cè)) str和unicode對(duì)象的轉(zhuǎn)換,通過(guò)encode和decode實(shí)現(xiàn),具體使用如下:
將GBK'哈哈'轉(zhuǎn)換成unicode,然后再轉(zhuǎn)換成UTF8 后就可以轉(zhuǎn)換成功,為什么呢?在python中str和unicode在編碼和解碼過(guò)程中。如果將一個(gè)str直接編碼成另一種編碼,會(huì)先把str解碼成unicode,采用的編碼為默認(rèn)編碼,一般默認(rèn)編碼是 ansci i,所以在上面示例代碼中***次轉(zhuǎn)換的時(shí)候會(huì)出錯(cuò),當(dāng)設(shè)定當(dāng)前默認(rèn)編碼為'gbk'后,就不會(huì)出錯(cuò)了。
在***節(jié)已經(jīng)說(shuō)過(guò),Python 中文亂碼中的字符串,只是一個(gè)字節(jié)數(shù)組,所以當(dāng)把a(bǔ)情況的str輸出到gbk編碼的控制臺(tái)時(shí),就將顯示為亂碼:鍝堝搱;而當(dāng)把b情況下的str輸出utf-8編碼的控制臺(tái)時(shí),也將顯示亂碼的問(wèn)題,是什么也沒(méi)有,也許'\xb9\xfe\xb9\xfe'用utf-8解碼顯示,就是空白吧至于reload(sys)是因?yàn)?Python2.5 初始化后會(huì)刪除 sys.setdefaultencoding 這個(gè)方法,我們需要重新載入 。
看完上述內(nèi)容,你們對(duì)Python中出現(xiàn)中文亂碼如何解決有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝大家的支持。