自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

深度剖析Python 中文亂碼說(shuō)明

開(kāi)發(fā) 后端
對(duì)于每一個(gè)IT行業(yè)的從業(yè)人員,無(wú)論是開(kāi)發(fā)人員、項(xiàng)目經(jīng)理、還是測(cè)試人員,掌握了Python 中文亂碼會(huì)使我們的編程工作更簡(jiǎn)單和更輕松。

一直以來(lái),Python 中文亂碼就是一個(gè)極為頭大的問(wèn)題,經(jīng)常拋出編碼轉(zhuǎn)換的異常,python中的str和unicode到底是一個(gè)什么東西呢?下面就進(jìn)行學(xué)習(xí)相關(guān)Python 中文亂碼問(wèn)題。

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

例如:

setdefaultencoding

對(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去解釋?zhuān)滹@示的出來(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 字符串和unicode

將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è)方法,我們需要重新載入 。

【編輯推薦】

  1. 有關(guān)Python系統(tǒng)文件進(jìn)行介紹指導(dǎo)
  2. 如何正確的使用Python函數(shù)
  3. 對(duì)Python 構(gòu)建工具進(jìn)行詳細(xì)介紹分析
  4. PythonAndroid淺析Python優(yōu)勢(shì)所在
  5. 如何使用Python模塊解析配置文件?
責(zé)任編輯:chenqingxiang 來(lái)源: NET130
相關(guān)推薦

2010-02-23 10:50:11

Python 測(cè)試框架

2010-02-04 14:01:44

Android應(yīng)用

2010-06-07 11:13:46

MySQL中文亂碼

2010-01-13 10:16:42

C++軟件

2010-02-01 13:34:59

Python 腳本

2010-02-02 15:25:35

Python語(yǔ)法

2010-02-03 16:56:24

Python包

2010-03-01 14:50:06

Python 工具

2010-03-01 18:33:30

2010-02-03 09:35:20

Python函數(shù)編程

2010-02-03 11:26:28

2010-02-24 16:33:28

Python功能

2010-02-02 13:22:06

Python面向?qū)ο?/a>

2010-02-26 10:38:29

Python語(yǔ)言

2010-02-02 14:22:50

Python示例

2010-02-26 17:44:40

Python測(cè)試框架

2010-02-23 10:05:52

Python歷史

2011-06-24 14:46:23

Qt 類(lèi)

2010-03-01 16:48:02

Python模塊

2010-02-03 15:17:58

Python 源文件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)