Python中字符串編碼在二進位之間相互轉換的方法

2021-01-08 學海無涯自學不息

#程式語言#

我是「學海無涯自學不惜!」,關注我,一同學習簡單易懂的Python編程。

第八十節:字符串編碼轉換

在學習「計算字符串的長度」(詳見第72節內容Python中如何計算字符串的長度),對編碼的概念、分類和作用,做過一個簡單的介紹,今天的內容,還是從「編碼」開始談。

最早的字符串編碼是ASCII碼,是由美國國家標準學會(American National Standard Institute , ANSI )制定的,所以叫做「美國信息交換標準代碼」,它的內容是這樣的:

ASCII碼內容示意圖

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()方法時,還有一點要注意的是:原字符串不會被修改。如果想修改原字符串,只能通過重新賦值。

以上就是普通字符串和二進位編碼之間互相轉換的方法。各位朋友還能看得入眼嗎?

感謝大家一直以來的支持,明天奉上的是「正則表達式」的內容,敬請拭目以待。

為自己加油,我是「學海無涯自學不惜!」

相關焦點

  • 深入剖析go中字符串的編碼問題——特殊字符的string怎麼轉byte?
    UTF-8是針對Unicode的一種可變長度字符編碼。它可以用來表示Unicode標準中的任何字符。UTF-8的特點是對不同範圍的字符使用不同長度的編碼。對於0x00-0x7F之間的字符,UTF-8編碼與ASCII編碼完全相同。
  • 二進位、十進位、八進位、十六進位間的相互轉換函數
    二進位、十進位、八進位、十六進位間的相互轉換函數1、輸入任意一個十進位的整數,將其分別轉換為二進位、八進位、十六進位。2、程序代碼如下:#include<iostream>using namespace std;int main(){int num;char a[39];//定義一個字符數組
  • 介紹「十六進位數字符串至數值轉換」函數
    有幾點需要注意:本文引用地址:http://www.eepw.com.cn/article/201701/337016.htm1:雖然該函數的輸入端子「string」的值可以是十六進位數、字符串(ASCII)或其他進位數,但是「string」的值流入該函數中時,先轉換成字符串(ASCII)。
  • 如何將SID在二進位和字符串格式中轉換
    今天講SID細節上一篇中,我們大概了解了DACL的基本概念。今天我們再來看看其中的SID部分。我們的問題是:如何將SID在二進位和字符串格式中進行轉換?當然,你可以使用Win32API來使用代碼進行轉換,具體就是這兩個API:ConvertSidToStringSid和ConvertStringSidtoSid,但有時候你可能在調試一段內存結構,或者你需要手動地對SID的格式進行轉換,那麼我們就來看看下表:舉個例子,如果你有一個SDI,值為:S-1-5-21-2127521184-1604012920-1887927527
  • 十進位數的編碼與運算
    這種編碼的優點是這4位基2碼之間滿足二進位的規則,而十進位數位之間則是十進位規則,故稱這種編碼為以二進位編碼的十進位(Binary Coded Decimal)數,簡稱BCD碼或二-十進位碼。另一個優點是在數字符的ASCII碼與這種編碼之間的轉換方便,即取每個數字符的ASCII碼的低4位的值便直接得到該數字的BCD碼,入/出操作簡便。
  • 跟我學解Python題-二進位轉換
    實現:輸入十進位正整數,輸出相應的二進位數字輸入樣例1:6輸出樣例1:110輸入樣例2:27輸出樣例2:11011解題過程:1、新建變量num,用於存儲輸入的十進位數字,num=int(input("請輸入想要轉換的十進位數字(十轉二
  • 二進位、八進位、十進位和十六進位數之間的轉換方法
    3、二、八、十進位數之間轉換(1)二進位 數與八進位數之間的轉換轉換方法①把二進位數轉換為八進位數時,按「三位並一位」的方法進行。③二進位數與十六進位數之間的轉換轉換方法a、把二進位數轉換為十六進位數時,按「四位並一位」的方法進行。
  • 二進位-八進位-十進位-十六進位之間的相互轉換
    課本中講到了進位之間的相互轉換,最近用到數字晶片74HC125,涉及到TTL-CMOLS-進位轉換,三個方面的知識,重新拿起書本,再查找資料,匯總信息如下:01:二進位-轉為-八進位//方法://每3位為一組,因為8進位數,需要3bit數據表示0~7,逢八進一;案例1:(1100 1110)2=(11 001
  • python進位轉換:十進位轉二進位的用法
    我們在學習python時候肯定會碰到關於進位轉換,其實這是非常簡單的,這個就像小學學習數學乘法口訣意義,只要記住轉換口訣即可輕鬆應用,一起來看下具體的操作內容吧~一、python進位轉換dec(十進位)—> bin(二進位)dec(十進位)—>
  • 用Python拼接字符串的常用方法及性能分析
    今天,我們來梳理一下Python拼接字符串的幾種常用方法,並對方法進行比較。如何拼接字符串本篇開始之前我們先看一下Python之禪中對於編碼的一些建議:Python之禪(import this試試看)中有一句說得很好:「Simple is better than complex」這句話解釋為
  • 前端學習隨筆14 利用js實現十進位與二進位相互轉換
    ) { // 在這裡實現你的轉化方法,注意需要判斷輸入必須為一個非負整數 // 這裡是上一個任務的實現}// 實現黨點擊轉化按鈕時,將輸入的十進位數字轉化為二進位,並顯示在result的p標籤內// 新的需求是,轉化顯示後的二進位數為bin-bit中輸入的數字寬度,例如// dec-number為5,bin-bit為5,則轉化後數字為00101// 如果bin-bit小於轉化後的二進位本身位數,則使用原本的位數
  • python教程之python數學運算
    '));#界面手動輸入數值,賦值給numberprint('類型:',type(number));#輸出number類型print('二進位:',bin(number));#函數bin將number轉換成二進位print('八進位:',oct(number));#函數oct將number轉換成八進位print('十六進位:',hex(number
  • 計算機的語言——二進位,十進位、八進位、十六進位與二進位之間的轉換
  • BASIC-12十六進位轉換為八進位
    #include <iostream>using namespace std;int main(){int n=0;cin>>n;char a[10][100000]; //原數字串,16進位 char b[400000]; //2進位中轉數字串char c[300000]; //8進位目標數字串 //獲取準備轉換的n個數 for(int i=0;i<n;
  • 乾貨| 完美Python入門基礎知識點總結
    >將對象 x 轉換為字符串repr(x)將對象 x 轉換為表達式字符串eval(str)用來計算在字符串中的有效Python表達式,並返回一個對象tuple(s)將序列 s 轉換為一個元組list(s)將序列 s 轉換為一個列表
  • Python基礎學習之常用六大數據類型
    Python六大常用數據類型: int 整數 float 浮點數 str 字符串 list 列表 tuple 元組 dict 字典講解這些先說一下python中的變量與變量名。變量其實本質上是一個具有特殊格式的內存,變量名則是指向這個內存的別名。python中的變量不需要聲明,所有的變量必須賦值了才能使用。
  • 10、進位轉換:二進位、八進位、十六進位、十進位之間的轉換
    上節我們對二進位、八進位和十六進位進行了說明,本節重點講解不同進位之間的轉換,這在編程中經常會用到,尤其是C語言。
  • 二進位與十六進位之間互相轉換
    通過上節課的學習,我們掌握了二進位與八進位互相轉換的方法(我們介紹的是421法),我們進行知識遷移,二進位數轉換成十六進位數的方法我們用
  • Python 爬蟲面試題 170 道
    20.如何區別可變數據類型和不可變數據類型21.將"hello world"轉換為首字母大寫"Hello World"22.如何檢測字符串中只含有數字?26.獲取字符串」123456「最後的兩個字符。27.一個編碼為 GBK 的字符串 S,要將其轉成 UTF-8 編碼的字符串,應如何操作?
  • LABVIEW編程之時間標識轉換為字符串
    在定時函數選板中,LABVIEW提供了許多的時間類相關函數,包括時間、日期轉換為字符串函數,實際上格式化寫入字符串函數完全支持時間標識,其轉換功能更多、更全面。與數值轉換為字符串類似,時間標識轉換為字符串的關鍵也是格式化字符串,LABVIEW提供了許多專門的時間相關的時間格式代碼,這些格式符不僅僅可以用來轉化為字符串,同時也可以時間標識控制項進行特色顯示,以下的例程中將同時利用字符串和時間標識顯示控制項顯示我們需要的時間日期。