溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Python中出現(xiàn)中文亂碼如何解決

發(fā)布時(shí)間:2021-07-05 16:56:22 來(lái)源:億速云 閱讀:1297 作者:Leah 欄目:編程語(yǔ)言

今天就跟大家聊聊有關(guān)Python中出現(xiàn)中文亂碼如何解決,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

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)容有意義,就必須用正確的編碼格式,解碼顯示。

例如:

Python中出現(xiàn)中文亂碼如何解決

對(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),具體使用如下:

Python中出現(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)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI