常用编码与为何要encode和decode
目錄
(小拓展):
(一)ASCII 碼
(二)Unicode 碼
(三)UTF-8 碼
(四)總結與encode、decode
(小拓展):
下面是每個字符對應的編號,字符0~9對應編號48~57,就是說ASCII碼全是字符!
我們鍵盤上每個鍵都對應一個ascii碼,這也就是為什么python中input('請輸入一個數')得到的是字符,我們還得把它轉換成int的原因了
(一)ASCII 碼
ASCII 碼 表示 127 個英文字符
ASCII 碼最先出現,最初只適合英語
隨著計算機普及,各國家語言不同,文字多少更是不同,127個根本不夠用。各國都要為自己的語言編碼。
中國自己的編碼是gbk,每個中文需要使用兩個字節來編碼,中文編碼的規則 —— GB2312? (都是常用漢字),比如高考報名時有的學生姓名輸入是亂碼,就是因為教育部用的GB2312,而他的名字中有個太偏僻的字。
由于不同國家有不同的編碼規則,如日本,韓國都使用各自國家的編碼規則,在多語言
混用的場合會出現混亂。怎么解決?
(二)Unicode 碼
Unicode 用來把所有語言都統一到一套編碼里,這樣就不會再有亂碼問題了。
Unicode通常用兩個字節編碼(有的也用四個字節),而 ASCII 碼通常用一個字節字節。ASCII 碼轉
換成 Unicode 在前面一個字節補 0
Unicode碼雖然全面,但是用起來笨重,比如說我就是想傳個1到服務器,你還要給我用兩個字節編碼么?傳額外15個0?
(三)UTF-8 碼
UTF-8 把unicode進行優化,減小了硬盤存儲空間浪費與傳輸效率低下
不過在內存中都要轉換成unicode
UTF-8 編碼把一個 Unicode 字符根據不同的數字大小編碼成 1-6 個字節,常用的英文字
母被編碼成 1 個字節,漢字通常是 3 個字節,只有很生僻的字符才會被編碼成 4-6 個字節。
如果你要傳輸的文本包含大量英文字符,用 UTF-8 編碼就能節省空間。
UTF-8 的一個好處在于,原有的 ASCII 的編碼可以在 UTF-8 下繼續工作。
(四)總結與encode、decode
搞清楚了 ASCII、Unicode 和 UTF-8 的關系,我們就可以總結一下現在計算機系統通用
的字符編碼工作方式:
在計算機內存中,統一使用 Unicode 編碼,當需要保存到硬盤或者需要傳輸的時候,
就轉換為 UTF-8 編碼。
用記事本編輯的時候,從文件讀取的 UTF-8 字符被轉換為 Unicode 字符到內存里,編
輯完成后,保存的時候再把 Unicode 轉換為 UTF-8 保存到文件:rw-file-utf-8
瀏覽網頁的時候,服務器會把動態生成的 Unicode 內容轉換為 UTF-8 再傳輸到瀏覽器:
web-utf-8
所以你看到很多網頁的源碼上會有類似的信息,表示該網頁正是用的 UTF-8 編碼。
首先要搞清楚,字符串在 Python 內部的表示是 unicode 編碼,因此,在做編碼轉換時,
通常需要以 unicode 作為中間編碼,即先將其他編碼的字符串解碼(decode)成 unicode,
再從 unicode 編碼(encode)成另一種編碼。
1.decode:其它碼-->unicode
decode 的作用是將其他編碼的字符串轉換成 unicode 編碼,如 str1.decode(‘gb2312’),表
示將 gb2312 編碼的字符串轉換成 unicode 編碼。
2.encode:unicode-->其它碼
encode 的作用是將 unicode 編碼轉換成其他編碼的字符串,如 str2.encode(‘gb2312’),表
示將 unicode 編碼的字符串轉換成 gb2312 編碼。
總結
以上是生活随笔為你收集整理的常用编码与为何要encode和decode的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python read_csv函数_Py
- 下一篇: java ini_Java读取ini文件