Python2.x字符串編碼思考

ASCII, Unicode , GBK, UTF-8

上面這四個東東是兩個層面上的東西,不能混為一談辈讶。
ASCII和Unicode一類摊腋,都是一種字符編碼標準辖众,里面包含了字符集,編碼格式载荔。既然是標準盾饮,那么就是一種約定俗成的東西。
這是廣義上的定義懒熙,我們一般說的ASCII和Unicode是指字符集丘损。

GBK和UTF-8對等,它們分別是ASCII和Unicode兩種標準下的一種編碼格式工扎。

編碼格式是用來存儲和傳輸?shù)呐窃浚糜趯⒆址械腸ode point轉(zhuǎn)化為機器碼(二進制碼)

參考:網(wǎng)頁編碼就是那點事

Python 2.x str & unicode

python里的unicode就不是上面所說的標準或者字符集了,而是python定義的一種類型肢娘。

str可以認為是編碼之后的字符串呈础,它可以通過encode和decode這兩個方式實現(xiàn)和unicode的相互轉(zhuǎn)換舆驶。

注意:str的編碼格式,如果是在解釋器中輸入的而钞,則取決于解釋器的默認編碼沙廉,比如是在iterm中運行解釋器,那么編碼格式就由iterm的編碼格式?jīng)Q定臼节;如果是保存到文件中的撬陵,則取決于文件保存的編碼格式,比如文件的編碼格式是utf-8 网缝,那么解釋器讀取str的時候就是utf-8de編碼格式巨税。

encode和decode

# -*- coding: utf-8 -*-
s = '知行合一'
# s是一個utf-8格式的字符串
us = s.decode('utf-8')
# s被解碼為unicode對象,賦值給us
ss = us.encode('gbk')
# us被編碼成gbk格式的字符串粉臊,賦值給ss

但是事實情況要比這個復雜垢夹,比如看如下代碼:

# -*- coding: utf-8 -*-
s = "知行合一"
s.encode('gbk')

看!str也能編碼维费,(事實上unicode對象也能解碼果元,但是意義不大)

為什么可以這樣呢?其實str還是做了解碼操作犀盟,只是這里的解碼操作被隱藏起來了而晒。流程還是和上面的一樣,當對s進行編碼之前阅畴,先會用默認的編碼對s進行解碼倡怎,再用解碼之后的unicode對象進行編碼。

這就引出了python2.x中在處理中文時贱枣,大多數(shù)出現(xiàn)錯誤的原因所在:python的默認編碼监署,defaultencoding是ascii

還是上面的例子,上面的代碼會報錯纽哥,錯誤信息:UnicodeDecodeError: ‘a(chǎn)scii’ codec can’t decode byte ……

因為沒有指定defaultencoding钠乏,所以它其實是在做這樣的事情

# -*- coding: utf-8 -*-
s = "知行合一"
s.decode('ascii').encode('gbk')

顯然中文字符超出了ASCII字符集的范圍,出現(xiàn)解碼錯誤

解決方法:
在文件的頭部用# -*- coding:utf-8 -*-指明編碼格式春塌,并且保存文件的時候要選擇相同的編碼格式晓避。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市只壳,隨后出現(xiàn)的幾起案子俏拱,更是在濱河造成了極大的恐慌,老刑警劉巖吼句,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锅必,死亡現(xiàn)場離奇詭異,居然都是意外死亡惕艳,警方通過查閱死者的電腦和手機搞隐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門驹愚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人尔许,你說我怎么就攤上這事么鹤。” “怎么了味廊?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵蒸甜,是天一觀的道長。 經(jīng)常有香客問我余佛,道長柠新,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任辉巡,我火速辦了婚禮恨憎,結果婚禮上,老公的妹妹穿的比我還像新娘郊楣。我一直安慰自己憔恳,他們只是感情好,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布净蚤。 她就那樣靜靜地躺著钥组,像睡著了一般。 火紅的嫁衣襯著肌膚如雪今瀑。 梳的紋絲不亂的頭發(fā)上程梦,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機與錄音橘荠,去河邊找鬼屿附。 笑死,一個胖子當著我的面吹牛哥童,可吹牛的內(nèi)容都是我干的挺份。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼如蚜,長吁一口氣:“原來是場噩夢啊……” “哼压恒!你這毒婦竟也來了?” 一聲冷哼從身側響起错邦,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎型宙,沒想到半個月后撬呢,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡妆兑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年魂拦,在試婚紗的時候發(fā)現(xiàn)自己被綠了毛仪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡芯勘,死狀恐怖箱靴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情荷愕,我是刑警寧澤衡怀,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站安疗,受9級特大地震影響抛杨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜荐类,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一怖现、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧玉罐,春花似錦屈嗤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至璧亚,卻和暖如春讨韭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背癣蟋。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工透硝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疯搅。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓濒生,卻偏偏與公主長得像,于是被迫代替她去往敵國和親幔欧。 傳聞我的和親對象是個殘疾皇子罪治,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容