#程式語言#
我是「學海無涯自學不惜!」,關注我,一同學習簡單易懂的Python編程。
第八十節:字符串編碼轉換
在學習「計算字符串的長度」(詳見第72節內容Python中如何計算字符串的長度),對編碼的概念、分類和作用,做過一個簡單的介紹,今天的內容,還是從「編碼」開始談。
最早的字符串編碼是ASCII碼,是由美國國家標準學會(American National Standard Institute , ANSI )制定的,所以叫做「美國信息交換標準代碼」,它的內容是這樣的:
ASCII碼只包括以上四種字符內容,並且最多只能表示256個字符。
1967年ASCII第一次以規範標準的類型發表以來,到今天它已經走過了53年的風雨歷程,作為一種國際通用的西文字符編碼標準,它的作用的不可忽視的,但隨著技術的發展,由於ASCII碼自身的局限性,它已逐漸被後起之秀-萬國碼「utf-8」所取代。
而在漢語環境下,最適合的編碼標準,應該是我國制定的「GBK」和「GB2312」。
在Python中,常用的字符串類型有str和bytes兩種。
str表示Unicode字符,就是包括ASCII碼、utf-8碼、GBK碼、GB2312碼之類的編碼;
bytes表示的則是二進位數據,其中包括了編碼的文本。
我們知道,機器語言本質上就是0和1組成的二進位語言,所以str和bytes字符在不能拼接的情況下,它們之間的轉換就非常必要了,因為在儲存和傳輸的時候,是必須要將str字符類型轉換為bytes字節類型的。
今天就來學習如何str和bytes類型之間轉換的方法。
1、在Python中,提供了encode()方法來將str轉換為bytes類型,通稱「編碼過程」,它的語法格式是這樣的:
str.encode(encoding=」utf-8」,errors=」strict」)
上面的str當然代表了要進行轉換的字符;
方法關鍵字encode後面的小括號中可以包含兩個可選參數,其間使用逗號「,」分隔;
第一個參數encoding=」utf-8」,用來指定轉碼的時候所採用的字符編碼,省略時默認為utf-8,當只用這一個參數時,可以直接用引號引用編碼;
第二個參數errors=」strict」,用來指定出錯時的處理方式,省略時默認值為strict,而它的值分別是:strict=出現錯誤拋出異常、ignore=忽略錯誤、replace=使用「?」替換錯誤、xmlcharrefreplace=使用XML的字符引用。
譚嗣同就義時留下一首詩,其中兩句:「我自橫刀向天笑,去留肝膽兩崑崙。」,頗為大氣磅礴!接下來就用這兩句詩定義一個字符串,並分別採用「GBK」和「utf-8」編碼轉換為二進位編碼輸出,詳見下圖:
觀察上面的結果,發現採用「utf-8」編碼轉換為二進位後要比採用「GBK」的長,這是因為,「GBK」編碼中漢字佔兩個字節,「utf-8」編碼中漢字佔三個字節。
至於encode()方法的第二個參數,一般情況下使用默認值處理,現在就不贅述了。
2、使用decode()方法將二進位的bytes類型轉換為str類型,通稱「解碼過程」,它的語法格式下面這樣的:
bytes.decode(encoding=」utf-8」,errors=」strict」)
可以看到,這個語法格式和參數和encode()方法的基本一致,事實上參數的內容也是一樣的,因為這兩種方法事實上就是一種相互逆轉的過程,所以直接用代碼實例就能說明,詳見下圖:
注意:在解碼過程中採用的字符編碼,要和編碼過程中採用的字符編碼保持一致。如同上面的實例一樣,編碼時採用「GBK」,解碼時依然採用「GBK」,否則就會出現異常,詳見下圖:
在使用decode()方法時,還有一點要注意的是:原字符串不會被修改。如果想修改原字符串,只能通過重新賦值。
以上就是普通字符串和二進位編碼之間互相轉換的方法。各位朋友還能看得入眼嗎?
感謝大家一直以來的支持,明天奉上的是「正則表達式」的內容,敬請拭目以待。
為自己加油,我是「學海無涯自學不惜!」