麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Python > 正文

徹徹底底地理解Python中的編碼問題

2020-02-15 23:12:41
字體:
來源:轉載
供稿:網友

Python處理文本的功能非常強大,但是如果是初學者,沒有搞清楚python中的編碼機制,也經常會遇到亂碼或者decode error。本文的目的是簡明扼要地說明python的編碼機制,并給出一些建議。

問題1:問題在哪里?

問題是我們的靶子,心中沒有問題去學習就會抓不住重點。

本文使用的編程環境是centos6.7,python2.7。我們在shell中鍵入python以打開python命令行,并鍵入如下兩句話:

 s = "中國zg" e = s.encode("utf-8")

現在的問題是:這段代碼能運行嗎?

答案是不能,會報如下的錯:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)

請留意一下錯誤中說明的0xe4,它是我們分析錯誤的突破口。

相信很多人都遇到過這個錯誤。那么新的問題來了。

問題2:Why?

要搞清楚原因,我們不妨認真分析下這兩句話的執行流程:

首先,我們通過鍵盤在python命令行解釋器中鍵入了 中國zg 并且給它加上了英文的雙引號,然后又賦值給了變量s,看起來很稀松平常是不是?其實里面大有玄機。

當我們通過鍵盤在程序中輸入字符時,我們是通過操作系統完成這個功能的。我們在屏幕上看到的 中國zg 實際上是操作系統給我們人類的一個反饋,告訴你:“嗨,哥們,你在程序中輸入了字符 中國zg ”

那操作系統給程序的反饋是什么呢?答案就是01串,這個01串是什么樣子,又是怎么生成的呢?

答案就是操作系統使用自己的默認編碼方式,將中國zg進行了編碼,并把編碼后的01串給了程序。

我們用的centos系統默認的編碼是utf-8,所以,只要知道中國zg每個字符的utf-8的編碼就可以知道01串是什么了。

查詢后,可以獲得它們的編碼是(以16進制和2進制表示):

z g
E4B8AD E59BBD 7A 67
11100101 10011011 10111101 11100101 10011011 10111101 01111010 01100111

現在我們知道操作系統傳給程序的01串長什么樣子了。然后,程序會怎么處理它呢?

程序看到這個01串被雙引號包圍著,自然知道這個01串是一個字符串。然后這個字符串被賦值給了s。

到此,就是第一句的執行邏輯。

現在繼續進行第二句的執行。

e = s.encode("utf-8")的意思是將字符串s用utf-8進行編碼,并將編碼后的字符串賦值給e。問題來了,程序現在知道s中的01串,還知道這個01串表示的是字符串,但這個字符串的編碼是什么呢?我們必須知道01串的現有編碼才能解析出里面的字符,也才能用新的編碼方式,如utf-8來重新編碼它。操作系統只給程序傳來了01串,并沒有告訴程序這個01串用的字符編碼是什么。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 在线天堂中文在线资源网 | av在线免费观看不卡 | h视频在线免费看 | 激情小说色 | 国产一级性生活视频 | 香蕉黄色网 | 媚药按摩痉挛w中文字幕 | 国产羞羞视频免费在线观看 | www.guochanav.com | 天天操天天碰 | 天天色综合6 | 国产污污视频 | 成人免费看毛片 | 一级国产航空美女毛片内谢 | 免费一级片观看 | 亚洲成人福利电影 | 日韩99| 成人免费一区二区 | 在线看免费观看日本 | 日本a大片| 成人偷拍片视频在线观看 | 一区二区精品视频在线观看 | 午夜精品老牛av一区二区三区 | 国产精品一区二区三区99 | av在线免费电影 | 国产精品久久久久久婷婷天堂 | 色妹子久久 | 亚洲电影在线播放 | 欧美高清另类自拍视频在线看 | 草草视频免费观看 | 国产精品v片在线观看不卡 成人一区二区三区在线 | 中文字幕综合在线观看 | 久久精品综合视频 | h视频免费观看 | 亚洲第一视频在线 | 精品一区二区三区在线观看视频 | 偿还的影视高清在线观看 | 草草在线观看 | 国产精品福利一区 | 成人做爰s片免费看网站 | 一区二区国产在线 |