Python中常用的字符編碼,編碼解碼之間的轉換

2020-12-22 雙木545

我們在寫程序的時候經常遇到轉碼的問題,或者亂碼的問題。這本文章就把經常遇到的ASCII,Unicode 和 UTF-8給大家梳理一下。

Python

一、ASCII 碼

ASCII(美國信息交換標準代碼)是基於拉丁字母的一套電腦編碼系統,對英語字符與二進位位之間的關係,它是現今最通用的單字節編碼系統。

ASCII 碼使用指定的7 位或8 位二進位數組合來表示128 或256 種可能的字符。標準ASCII 碼也叫基礎ASCII碼,使用7 位二進位數(剩下的1位二進位為0)來表示所有的大寫和小寫字母,數字0 到9、標點符號, 以及在美式英語中使用的特殊控制字符。

非 ASCII 編碼

英語用128個符號編碼就夠了,但是用來表示其他語言,128個符號是不夠的。比如,在法語中,字母上方有注音符號,它就無法用 ASCII 碼表示。於是,一些歐洲國家就決定,利用字節中閒置的最高位編入新的符號。

二. Unicode

Unicode(統一碼、萬國碼、單一碼)是計算機科學領域裡的一項業界標準,包括字符集、編碼方案等。Unicode 是為了解決傳統的字符編碼方案的局限而產生的,它為每種語言中的每個字符設定了統一併且唯一的二進位編碼,以滿足跨語言、跨平臺進行文本轉換、處理的要求。1990年開始研發,1994年正式公布。

Unicode 當然是一個很大的集合,現在的規模可以容納100多萬個符號。每個符號的編碼都不一樣,比如,U+0639表示阿拉伯字母Ain,U+0041表示英語的大寫字母A,U+4E25表示漢字嚴。具體的符號對應表,可以查詢unicode.org,或者專門的漢字對應表。

Unicode的問題:

Unicode只是一個符號集,它只規定了符號的二進位代碼,卻沒有規定這個二進位代碼應該如何存儲。

1)出現了Unicode的多種存儲方式,也就是說有許多種不同的二進位格式,可以用來表示Unicode。

2)Unicode在很長一段時間內無法推廣,直到網際網路的出現。

三、UTF-8

UNICODE比ASCII佔用大一倍的空間,而對ASCII來說高字節的0對他毫無用處。為了解決這個問題,就出現了一些中間格式的字符集,他們被稱為通用轉換格式,即UTF

UTF-8就是在網際網路上使用最廣的一種Unicode的實現方式。其他實現方式還包括UTF-16(字符用兩個字節或四個字節表示)和UTF-32(字符用四個字節表示),不過在網際網路上基本不用。重複一遍,這裡的關係是,UTF-8是Unicode的實現方式之一。

六、decode和encode的區別

字符串在Python內部的表示是unicode編碼,因此,在做編碼轉換時,通常需要以unicode作為中間編碼,即先將其他編碼的字符串解碼(decode)成unicode,再從unicode編碼(encode)成另一種編碼。

decode的作用是將其他編碼的字符串轉換成unicode編碼,如str1.decode('gb2312'),表示將gb2312編碼的字符串str1轉換成unicode編碼。

encode的作用是將unicode編碼轉換成其他編碼的字符串,如str2.encode('gb2312'),表示將unicode編碼的字符串str2轉換成gb2312編碼。

相關焦點

  • python字符的編碼與解碼
    下面就來通過python中自帶的函數一起來驗證一下。理解:ord() 函數:以一個字符串作為參數,返回對應的 ASCII 數值。chr()函數:用一個整數作參數,返回一個對應的字符。可以二進位,十進位,十六進位。
  • Python中字符串編碼在二進位之間相互轉換的方法
    而在漢語環境下,最適合的編碼標準,應該是我國制定的「GBK」和「GB2312」。在Python中,常用的字符串類型有str和bytes兩種。我們知道,機器語言本質上就是0和1組成的二進位語言,所以str和bytes字符在不能拼接的情況下,它們之間的轉換就非常必要了,因為在儲存和傳輸的時候,是必須要將str字符類型轉換為bytes字節類型的。今天就來學習如何str和bytes類型之間轉換的方法。
  • Python 2.x 字符編碼終極指南
    但僅了解這篇文章的內容,並不能幫我們在日常編程中躲過一些字符編碼相關的坑,Stackoverflow 上就有大量編碼相關的問題,比如 1,2,3。本文首先嘗試對編碼、解碼進行一個宏觀、直觀的解讀,然後詳細來解釋 python2 中的str和unicode,並對常見的UnicodeEncodeError 和 UnicodeDecodeError 異常進行剖析。
  • 給妹子講python-S01E08理清python中的字符編碼方法
    容器遍歷和列表解析式給妹子講python-S01E05字符串的基本用法給妹子講python-S01E06字符串用法進階給妹子講python-S01E07字符編碼歷史觀:從ASCII到Unicode【要點搶先看】1.python中編、解碼的本質是文本字符串和字節字符串的相互轉換
  • 【Python基礎】(6.1)字符編碼
    字符編碼中的編碼指的是翻譯或者轉換的意思,即將人能理解的字符翻譯成計算機能識別的數字3.2 字符編碼表的發展史 (了解)字符編碼的發展經歷了三個重要的階段,如下###3.2.1 階段一:文本編輯器輸入任何字符都是最新存在於內存中,是unicode編碼的,存放於硬碟中,則可以轉換成任意其他編碼,只要該編碼可以支持相應的字符
  • 編碼解碼是什麼意思?URL 如何編碼解碼?為什麼要編碼?
    編碼解碼是什麼?編碼是信息從一種形式或格式轉換為另一種形式的過程,也稱為計算機程式語言的代碼簡稱編碼。用預先規定的方法將文字、數字或其它對象編成數碼,或將信息、數據轉換成規定的電脈衝信號。編碼在電子計算機、電視、遙控和通訊等方面廣泛使用。編碼是信息從一種形式或格式轉換為另一種形式的過程。解碼,是編碼的逆過程。
  • 給妹子講python-S01E07字符編碼歷史觀:從ASCII到Unicode
    容器遍歷和列表解析式給妹子講python-S01E05字符串的基本用法給妹子講python-S01E06字符串用法進階【要點搶先看】1.字符編碼與解碼的概念2.ASCII編碼到Unicode編碼的發展過程3.容易混淆的字符編碼與字符代碼【妹子說】上兩集基本上讓我們熟悉了字符串的常見用法
  • python入門教程06-01(python語法入門之字符編碼)
    ,可不是為了給你瞅一眼python代碼寫的啥,而是為了執行python代碼、會識別python語法)三、字符編碼介紹3.1 什麼是字符編碼?字符編碼中的編碼指的是翻譯或者轉換的意思,即將人能理解的字符翻譯成計算機能識別的數字3.2 字符編碼表的發展史 (了解)字符編碼的發展經歷了三個重要的階段,如下3.2.1 階段一:一家獨大現代計算機起源於美國,所以最先考慮僅僅是讓計算機識別英文字符,於是誕生了ASCII表# ASCII表的特點: 1、只有英文字符與數字的一一對應關係
  • Python3 是如何解決棘手的字符編碼問題的?
    str>>> a = "a">>> a'a'>>> type(a)<class 'str'>>>> b = "禪">>> b'禪'>>> type(b)<class 'str'&
  • python如何編碼解碼解析json對象
    前言json是一種以鍵值對形式存在的輕量級的數據結構,和python中的字典類型具有相同的表現結構。使用 JSON 函數需要導入 json 庫:import json。在Java中我們知道json有jsonObject和jsonArray,且可以通過String、map等相互轉換,那麼在python中,json對象是如何來讀取解析的呢?python解析json對象1.json.dumpsjson.dumps用於將 Python 對象編碼成 JSON 字符串。
  • Python 編碼錯誤的本質原因
    字符碼字符碼(Code Point)指的是字符集中每個字符的數字編號,例如 ASCII 字符集用 0-127 連續的128個數字分別表示128個字符,例如 「A」 的字符碼編號就是65。然而 EASCII 時代是一個混亂的時代,各個廠家都有自己的想法,大家沒有統一標準,他們各自把最高位按照自己的標準實現了自己的一套字符編碼標準,比較著名的就有 CP437, CP437 是 始祖IBM PC、MS-DOS使用的字符編碼,如下圖:
  • Python 編碼為什麼那麼蛋疼?
    作者:劉志軍,6年+Python使用經驗, 高級開發工程師,目前在網際網路醫療行業從事Web系統構架工作個人公眾號:Python
  • 令人頭疼的Python編碼問題
    或者是列印一串字符串,確是亂碼,搞人心態。別慌,本文將從編碼的前世今生講解,讓你對編碼有個深刻了解,以便後期對Python編碼問題進行分析和解決。字符編碼的前世今生大家都知道,電腦本身是不認識字符的,只認識0和1。
  • python爬蟲小知識,中文在url中的編碼解碼
    有時候我們做爬蟲經常會遇到這種編碼格式,大概的樣式為 %xx%xx%xx,對於這部分編碼,python提供了一個quote的方法來編碼,對應的解碼為unquote方法。導入quote方法是urllib庫的一個方法,它的導入方式為from urllib.parse import quote,unquote不需要安裝,urllib庫是python自帶的一個庫,直接導入就可以使用。
  • python編解碼問題詳解
    ASCII共256個,常用的是0-127,共128個GB2312編碼適用於漢字處理、通信等系統之間的信息交換。「GB"是漢語拼英"guobiao」/"國標"的縮寫,它是對ASCII的中文擴展。GBK編碼是漢字編碼標準之一,是在GB2312-80 標準基礎上的內碼擴展規範,使用了雙字節編碼。向下兼容GB2312。
  • 如何正確解決Python中的中文編碼問題?
    編程派微信號:codingpy作者:xianglong原文連結:http://xianglong.me/article/learn-python-1-chinese-encoding/字符串是Python中最常用的數據類型,而且很多時候你會用到一些不屬於標準ASCII字符集的字符,這時候代碼就很可能拋出UnicodeDecodeError:
  • python基礎學習—04字符串與編碼
    定義:將信息從一種形式轉換為另外一種形式的過程叫做編碼,即信息轉換過程舉例:信息加密解密、語言翻譯1.2  計算機編碼定義:將計算機可讀信息轉換為人類可讀形式的過程叫做計算機編碼。2.3  Unicode碼英文名:Unicode中文名:統一碼別名:萬國碼、單一碼簡介:Unicode碼為每種語言中的每個字符設定了統一且唯一的二進位編碼,統一了不同國家的編碼,表示不同國家的文字;UTF-8、UTF-16、UTF-32都是將數字轉換到程序數據的編碼方案。
  • Python基礎:數據類型和變量&字符串和編碼
    Python基礎:2.字符串和編碼字符編碼我們已經講過了,字符串也是一種數據類型,但是,字符串比較特殊的是還有一個編碼問題。因為計算機只能處理數字,如果要處理文本,就必須先把文本轉換為數字才能處理。所以,本著節約的精神,又出現了把Unicode編碼轉化為「可變長編碼」的UTF-8編碼。UTF-8編碼把一個Unicode字符根據不同的數字大小編碼成1-6個字節,常用的英文字母被編碼成1個字節,漢字通常是3個字節,只有很生僻的字符才會被編碼成4-6個字節。
  • 詳解C++字符編碼的轉換
    這篇文章介紹了如何在最常見的編碼方式(Unicode, UTF-8, ANSI)之間進行轉換,結合代碼實例,清晰明了,方便讀者理解,例子也可以直接拿來使用。本文推薦給經常對文字字符串進行處理的程式設計師閱讀,使其掌握字符轉換的一些基本方法。
  • Python老手告訴你的應用總結:中字節、字符串和編碼
    Python中的字節碼用b'xxx'的形式表示。x可以用字符表示,也可以用ASCII編碼形式\xnn表示,nn從00-ff(十六進位)共256種字符。字節通過某種編碼形式就可以轉化為相應的字符。字節通過encode()方法傳入編碼方式就可以轉化為字符,而字符通過decode()方法就可以轉化為字節:我們可以看到用不同的編碼方式解析出來的字符和字節的方式是完全不同,如果編碼和解碼用了不同的編碼方式,就會產生亂碼,甚至轉換失敗。