亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python與字符編碼問題的示例分析

發布時間:2021-08-26 11:35:20 來源:億速云 閱讀:141 作者:小新 欄目:開發技術

這篇文章主要介紹了python與字符編碼問題的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

故事零:編碼的定義

我們從“SOS“(國際通用求助信號)開始,它的摩斯密碼的編碼是:

“…---…”,想一下為什么選用S、O、S來作為求救信號?因為它簡單,容易辨別且不容易發錯呀!
那么,字符編碼就是:

´給定一系列字符,對每個字符賦予一個數值,用數值來代表對應的字符,這一數值就是字符的編碼。例如,我們給字符'A'賦予數值0x41,則0x41就是字符'A'的編碼。字符編碼是字符的表現、儲存方式。

字符編碼需要處理兩件事:

(1)規定一個字符集中的字符由多少個字節表示;

(2)制定該字符集的字符編碼表,即該字符集中每個字符對應的(二進制)值。

字符集:´給定一系列字符并賦予對應的編碼后,所有這些字符和編碼對組成的集合就是字符集。´比如,給定字符列表為{'A','B'}時,{'A'=>0x41,‘B'=>0x42}就是一個字符集。

常見字符集有:

ASCII
GB2312
GBK
GB18030
Big5
Unicode

一張圖總結:

python與字符編碼問題的示例分析

故事一:Python2與Python3的字符串類型?

python2中的字符串有str和unicode類型,而python3中字符串只有unicode類型。比如 ‘你好'是str字符串,而 u'你好'則是unicode字符串。

故事二:decode()和encode()傻傻分不清?

decode() 是將str字符串轉化為unicode字符串;encode() 是將unicode字符串轉化為str字符串。所以要做一些編碼的轉換通常是以unicode作為中間編碼做轉換。如name.decode(“GB2312”)表示將GB2312編碼的字符串name轉換成unicode編碼,name.encode(“GB2312”)表示將unicode字符串name轉換成GB2312編碼。

python與字符編碼問題的示例分析

故事三:UnicodeEncodeError: ‘ascii' codec can't encode character?

我們先看看兩張圖,是不是很煩?

python與字符編碼問題的示例分析

python與字符編碼問題的示例分析

下面我們看個例子:

python與字符編碼問題的示例分析

當用u'字符串'申明這個字符串變量時就指明了該字符串是使用unicode字符編碼。當要將unicode字符串轉換為str字符串或者寫入文件時,python2默認使用ASCII 碼保存數據,而ASCII 碼無法識別大于128 的字符,于是報了上面的錯誤。
附ASCII碼表:

python與字符編碼問題的示例分析

故事四:unicode是什么?

unicode可以看做一個終極的字符編碼方法,它給出了地球上常用字符的二進制映射,而且所有的二進制字符串唯一地表示一個字符。但是,unicode只給出了字符和二進制串的對應關系,并沒有給出存儲形式。而不同字符所占用的存儲空間可能不同,比如ASCII 在unicode中只占用了一個字節即可,而常用漢字在unicode中需要占用兩個字節,還有一些羅馬字符可能需要三個或以上字節。如果直接存儲的話可能導致無法分割字符串,也無法正確解碼出字符。

故事五:UTF-8橫空出世?

互聯網的普及,強烈要求出現一種統一的編碼方式。這時候UTF-8 出場。UTF-8 是unicode在計算機中的一種實現方式。UTF-8是一種變長編碼,每個字符占1-4 個字節。UTF-8 將字節分為數值位和標識位,數值位真正保存字符編碼數值,標識位表示這個字節是屬于哪個字符的、或者該字符占多少個字節。UTF-8 編碼方法:

單字節,首位為標識位0;多字節字符首字節標志位1··10開頭,字符占多少字節則有多少1,其他字節標識位10開頭;

§  單字節字符: 0xxxxxxx (以0 開頭標志位,數值位用x 表示)

§  雙字節字符: 110xxxxx 10xxxxxx

§  三字節字符: 1110xxxx 10xxxxxx 10xxxxxx

§  四字節字符: 11110xxx 10xxxxxx 10xxxxxx10xxxxxx

unicode變為UTF-8 編碼非常簡單,unicode二進制按照從低到高,填充UTF-8的數值位,除去那些不真正表示數值的標識位(字節開頭的0,10,110,1110和11110),順序也是由低到高。以漢字“你”為例,可見它的unicode編碼為“4f60”(01001111 01100000)。

python與字符編碼問題的示例分析

從“你”的unicode值范圍可以看到需要三個字節,接著從低位字節向高位字節填充得到“你”的UTF-8 編碼(高位沒有填充完則用0補充)。

python與字符編碼問題的示例分析

可以看到將UTF-8 用于標記位(紅色)的位去掉,合并可以得到原始的unicode碼。

故事六:"unicode-escape"與"unicode-unescape"

“\u”是表示unicode的轉義字符,用\uxxxx這種方式表示unicode字符就是”unicode-escape”方式。說人話:´一句話:xxx.decode(“unicode-escape”)相當于把xxx解碼成unicode類型并返回。
而用”%uxxxx”的方式表示unicode字符,這種方式就是”unicode-unescape”,常用于javascript。

番外故事七:讀了那么多年書,你真的了解“全半角”?

全角---指一個字符占用兩個標準字符位置。
半角---指一字符占用一個標準的字符位置。
引申:寫程序時雙引號、冒號、小括號等為啥如此糾結?
--我國專家在制定GB2312字符集時,ASCII里本來就有的數字、標點、字母都統統重新編了兩個字節長的編碼。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“python與字符編碼問題的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

大洼县| 枣强县| 阳信县| 沂水县| 石阡县| 苗栗市| 尼勒克县| 咸丰县| 宁海县| 剑河县| 三河市| 隆昌县| 顺义区| 朔州市| 泉州市| 星子县| 临泽县| 张掖市| 鞍山市| 乌兰浩特市| 伊金霍洛旗| 盱眙县| 华安县| 太原市| 沾益县| 铁力市| 拉萨市| 漯河市| 石楼县| 云南省| 邳州市| 阿克苏市| 新丰县| 泗洪县| 西和县| 武宁县| 江川县| 贵南县| 阿尔山市| 花莲市| 长垣县|