python字符的編碼與解碼

2021-01-09 葉子陪你玩編程

什麼是字符編碼

計算機裡面是由各種電子電路組成的,它是如何識別我們的寫的字符的,比如hello ,你,我。

直接識別是不可能,它只能識別 二進位的0,1字符。所有我們輸入進去的字符,最終都會被轉化成0,1這種組合在一起的一串數字。

計算機存儲信息的最小單位,稱之為位(bit),又叫比特,二進位的一個「0」或一個「1」叫一位。

8個二進位位組成1個字節(Byte),1024位元組(Byte)也就是1KB,1024KB是1M,這就是我們平常說的文件大小的單位(M),比如這個圖片大小5M。

既然計算機是通過二進位的數字來識別不同字符的,那不同的字符該用多少個1和0,又該以什麼樣的順序來排列呢?

為什麼要字符編碼

這裡為了規範,就出現了ASCII編碼。ASCII ((American Standard Code for Information Interchange): 美國信息交換標準代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其他西歐語言。

這裡的編碼規定了,每個字符由幾個0和1組成,順序也定下了。裡面包含了控制字符或通信專用字符,阿拉伯數字,大小寫英文字符,標點運算符號等,一共128個。

32~126(共95個)是字符(32是空格),其中48~57為0到9十個阿拉伯數字。65~90為26個大寫英文字母,97~122號為26個小寫英文字母,其餘為一些標點符號、運算符號等。

了解進位數

進位也就是進位計數制,是人為定義的帶進位的計數方法。對於任何一種進位---X進位,就表示每一位置上的數運算時都是逢X進一位。 十進位是逢十進一,十六進位是逢十六進一,二進位就是逢二進一,以此類推,x進位就是逢x進位。

下面就來通過python中自帶的函數一起來驗證一下。

理解:

ord() 函數:以一個字符串作為參數,返回對應的 ASCII 數值。

chr()函數:用一個整數作參數,返回一個對應的字符。可以二進位,十進位,十六進位。

不理解進位數的可以自己去學習一下,或者利用python自帶的進位轉換函數去試一下。

0b 開頭表示二進位,0o表示八進位,0x表示十六進位,通過內置進位函數可以想互進行轉換。

Hello這樣的一個詞語要被計算機認識,只要按照ASCII編碼來就可以了。 對應的16進位編碼是:48 65 6C 6C 6F

編碼的種類

百科知識:

在英語中,用128個符號編碼便可以表示所有,但是用來表示其他語言,128個符號是不夠的。比如,在法語中,字母上方有注音符號,它就無法用 ASCII 碼表示。於是,一些歐洲國家就決定,利用字節中閒置的最高位編入新的符號。比如,法語中的é的編碼為130(二進位10000010)。這樣一來,這些歐洲國家使用的編碼體系,可以表示最多256個符號 [5] 。

但是,這裡又出現了新的問題。不同的國家有不同的字母,因此,哪怕它們都使用256個符號的編碼方式,代表的字母卻不一樣。比如,130在法語編碼中代表了é,在希伯來語編碼中卻代表了字母Gimel (),在俄語編碼中又會代表另一個符號。但是不管怎樣,所有這些編碼方式中,0--127表示的符號是一樣的,不一樣的只是128--255的這一段 。

至於亞洲國家的文字,使用的符號就更多了,漢字就多達10萬左右。一個字節只能表示256種符號,肯定是不夠的,就必須使用多個字節表達一個符號。比如,簡體中文常見的編碼方式是 GB2312,使用兩個字節表示一個漢字,所以理論上最多可以表示 256 x 256 = 65536 個符號 。

因為ASCII不夠用了,所以需要擴展字符集。

百科知識2:

不同的國家和地區制定了不同的標準,由此產生了 GB2312、GBK、GB18030、Big5、Shift_JIS 等各自的編碼標準。這些使用多個字節來代表一個字符的各種漢字延伸編碼方式,稱為 ANSI 編碼。在簡體中文Windows作業系統中,ANSI 編碼代表 GBK 編碼;在繁體中文Windows作業系統中,ANSI編碼代表Big5;在日文Windows作業系統中,ANSI 編碼代表 Shift_JIS 編碼。 [1]

簡單的說,在簡體中文系統下,ANSI編碼代表GB2312編碼;在日文作業系統下,ANSI編碼代表JS編碼。 [2]

不同 ANSI 編碼之間互不兼容,當信息在國際間交流時,無法將屬於兩種語言的文字,存儲在同一段 ANSI 編碼的文本中。ANSI編碼表示英文字符時用一個字節,表示中文用兩個或四個字節。

但是這麼多編碼,很混亂,不同 ANSI 編碼之間互不兼容,不同語言交流時會出現亂碼。為了統一所有文字的編碼,Unicode誕生了。Unicode把所有語言都統一到一套編碼裡,這樣就不會再有亂碼問題了。

雖然統一了所有字符,但是在存儲和傳輸的時候,也帶來了一些缺點,如果你傳輸的都是英文字符,使用unicode編碼就會使用更多的字節,所以後面實現了utf-8編碼,可以根據字符的情況進行可變的字節表示。

在文件保存的時候,其實是可以看見有編碼選擇的,平時可能不是很關注,讀寫文件出現編碼格式錯誤,就可以從這方面來思考解決。

編碼和解碼

utf編碼讀取文件

ANSI讀取文件/gbk

utf-8 帶 bom讀取

忽略錯誤會出現亂碼

使用utf-8-sig編碼可以解決這個問題

encode:將 Unicode 字符串轉換為特定編碼格式對應的字節碼的過程

decode:將特定編碼格式的字節碼轉換為對應的 Unicode 字符串的過程

Python3 的默認編碼為 Unicode。

編碼檢測

有時候解碼格式報錯,但是我們並不知道它是什麼編碼,那該怎樣解碼?可以通過chardet這個模塊來檢測我們文件數據的一個編碼格式,結果會顯示可信度。

python和scratch生成隨機不相同的十個數

python滑鼠連點器-測試版

python圖像處理-濾鏡處理

python圖像處理-個性化頭像

相關焦點

  • 刨根究底字符編碼(2):關鍵術語解釋
    編碼與解碼編碼(Encode),是信息從一種形式轉換為另一種形式的過程,比如用預先規定的方法將字符(文字、數字、符號等)、圖像、聲音或其它對象,轉換成規定的電脈衝信號或二進位數字的過程,就屬於編碼。 字符與字符集1.
  • 「測一測你的性格」小案例學習python字符串操作
    今天樹哥也嘗試用python做一個「性格測試小程序」,用這個案例來說明一下python的日曆和字符串操作的一些用法。一、案例分析案例題目:讓用戶輸入出生年月日,返回這是這一年的第幾周第幾天,並輸出當周的日曆。給出用戶的屬相給出用戶的星座,並告知用戶的性格。
  • 35行代碼利用python生成字符畫,非常適合初學者練習,附源碼!
    35行代碼利用python生成字符畫,非常適合初學者練習,附源碼! python字符畫生成的原理及其簡單,一句話概括就是----將圖片像素點用不同字符代替,從而將像素組成的圖片轉變成用字符組成的字符畫。為了儘可能的使得字符畫展示效果與圖片相同。
  • Web安全:編解碼工具
    Web安全:編解碼工具 編碼是信息從一種形式轉換為另一種形式的過程,例如URL編碼、Base64編碼及十六進位編碼等。也指將編碼後的字符或者字符串還原為信息的過程,如解碼與編碼互逆。現在常用的編碼、解碼工具有XSSEncode、小葵多功能轉換工具等。
  • 編碼方式有哪些_簡述常用的編碼方式
    簡述常用的編碼方式   1、ASCII碼   學過計算機的人都知道ASCII碼,總共有128個,用一個字節的低7位表示,0~31是控制字符如換行回車刪除等;32~126是列印字符,可以通過鍵盤輸入並且能夠顯示出來。
  • Unicode超越ASCII成網上最流行字符編碼
    Google的高級軟體設計師Mark Davis在其博客上表示,Unicode編碼目前已經超越了ASCII編碼成為網際網路上最流行的字符編碼格式。Unicode是一個字符編碼標準,可支持數十種語言,包括附加符號的羅馬字符。ASCII則是幾十年前的舊標準,僅能容納128或256個字符,它的歷史可以追述到一個世紀前的雷明頓打字機。
  • 你了解java中的幾種編碼方式?解決亂碼問題可能並不麻煩
    是於是而 UTF-8 採用了一種變長技術,每個編碼區域有不同的字碼長度。不同類型的字符可以是由 1~6 個字節組成。以上這些編碼方式會為每一個漢字或者是字母建立一個編碼庫,在編碼的時候字母和編碼一一對應。3、為什麼會出現亂碼?這個問題就是因為編碼和解碼是採用了不同的或者是不兼容的編碼方案。比如一個用UTF-8編碼的後的字符。
  • 被壓縮的視覺:視頻編解碼技術
    視頻壓縮的基本原理就是去除這些冗餘信息,將視頻壓縮300到500倍,常見的壓縮方法有預測編碼、變換編碼和熵編碼技術。如圖3所示,將輸入的視頻信息按照各個編碼模塊進行處理,輸出碼流的過程稱為視頻編碼過程,再通過對應的熵解碼、變換解碼和預測解碼過程,將碼流還原成YUV420視頻流的過程稱為視頻解碼過程。
  • 熟知五種文件編碼方式,輕鬆規避中文亂碼陷阱
    【2】ASCII編碼ASCII全稱為 American Standard Code for Information Interchange,翻譯為「美國信息交換標準代碼」。它是世界上最早最通用的單字節編碼系統,主要用來顯示現代英語及其他西歐語言,不能表示中文成千上萬個的單詞。ASCII 碼用 7 位表示,只能表示 128 個字符。
  • code128-A碼、B碼、C碼的編碼對比
    code128碼可表示從 ASCII 0 到ASCII 127 共128個字符(其中包含數字,字母,符號),所以稱128碼。而Code128 碼又分為A碼,B碼,C碼三個子集。那麼A碼,B碼,C碼編碼規則有什麼區別呢?下面就來簡單介紹下。
  • 解碼晶片對聽感有決定權?#HIFI大家問#
    答:解碼晶片即DAC,含義是「數模轉換器」。  目前的數字聽音系統,主要由四部分構成:數字轉盤->解碼->耳放->耳機,  分別起到數位訊號存讀取->數位訊號轉換成模擬信號->模擬信號整流放大->揚聲器單元振動發聲四個作用。
  • Java經典算法:解碼方式
    使用以下映射將包含來自AZ的字母的消息編碼為數字:'A'->1'B'-> 2...'Z'-> 26給定包含數字的已編碼消息,請確定對其進行解碼的總數。
  • 增H.265 編碼,PotPlayer 1.5.41713 漢化版下載
    因此論視頻解碼播放,PotPlayer具有優勢,尤其播放MKV,BD片源之類的高質量視頻文件。本月來自韓國的知名播放器Potplayer迎來了小幅升級,最新版本號為1.5.41713,新增了HEVC、H.265 CUDA編碼等更新功能,具體更新內容參考以下:Daum PotPlayer 1.5.41713更新日記:• 添加HEVC(H.265)播放功能• 添加H.265 CUDA編碼功能•
  • Mozilla Firefox瀏覽器默認開啟AVIF圖片解碼功能
    之前曾有報導稱Mozilla Firefox準備默認啟用AVIF圖像解碼,現在假期已過,Mozilla的開發者們也回到了自己的工作檯前,今天Firefox已經默認啟用了AVIF。 從Google的Chrome 85開始就已經默認啟用了AVIF支持,而Firefox的支持雖然已經開發完成,但暫時是默認禁用的。
  • 「年度十大網絡流行語」編碼規律解析
    的編碼規律,為當今新聞傳播工作者在語言運用方面提供建議。 一、「年度十大網絡流行語」編碼方式 斯圖亞特?霍爾認為,意義不是傳送者「傳遞」的,而是接受者「生產」的。 「年度十大流行語」的受眾編碼和解碼,恰是對這一理論的證明。
  • 針對Python開發人員,10個很棒的Python項目創意,快來學
    有時,其中一些URL可能帶有怪異的字符。 URL縮短器在減少這些URL中的字符並使它們更易於記憶和使用方面起著重要作用。URL縮短的想法是使用隨機和字符串模塊從輸入的長URL生成新的短URL。之後,您需要映射長URL和短URL,並將它們存儲在資料庫中,以供用戶以後使用。
  • QQ幸運字符星座字符怎麼抽 QQ星座字符有哪些介紹
    QQ幸運字符出了星座系列,目前十二星座的字符已經都出了,那麼QQ星座字符怎麼抽呢?QQ星座字符有哪些呢?下面小編就為大家帶來相關介紹,感興趣的朋友們快來一起看看吧!十二星座字符還是非常好看的,顏值很高,大家不妨抽卡試試。
  • 數字編碼帶來更高傳輸效率 全面數位化還面臨雙重製約
    數字編碼帶來更高傳輸效率據了解,模擬信號是指用連續變化的物理量所表達的信息,其信號的幅度、頻率或相位會隨時間出現連續變化。例如溫度、溼度、電流、電壓等,這些物理量在一定的時間範圍內可以有無限多個不同的取值,它們都可以用模擬信號來表示。
  • 小小星號創奇蹟:一個字符就能改變你編寫Python代碼的方式
    對初學者來說極具吸引力,它沒有聲明,沒有花哨的字符或者奇怪的句法。正因如此,Python才得以風靡全球。除此之外,Python還具備一些很酷的特點,比如裝飾器和列表解析。這些特點確實能創造奇蹟,但*也值得這一美名,小小字符能帶來翻天覆地的變化。