Python3 - 字符編碼


計算機采用 8 bit(比特,計算機最小表示單位) = 1 byte(字節,計算機最小存儲單位),一個字節能表示的最大的整數就是 255(二進制11111111 = 十進制255),如果要表示更大的整數,就必須用更多的字節,比如兩個字節可以表示的最大整數是 65535 。

ASCII (8位)編碼包括大小寫英文字母、數字和特殊字符,總共256(255+數字0,一共256)個。

中文編碼格式的發展歷程是在 ASCII 的基礎之上經歷了 GB2312(7K+)、GBK1.0(2W+)和 GB18030(27W+)。

Unicode (16位)把所有語言都統一到一套編碼里,解決了亂碼的問題,但造成了存儲空間和網絡傳輸的浪費,因此 Unicode 轉化成了可變長編碼的 UTF-8 編碼。Python3 源碼文件默認使用 UTF-8 編碼,可以正常解析中文,無需指定 UTF-8 編碼。

ASCII編碼 GBK編碼 Unicode編碼 UTF-8編碼
英文 1btye 1btye 2byte 1byte
中文 N/A 2byte 2byte 3byte

Python2 中默認的編碼格式是 ASCII,因此需要指定字符編碼才能支持中文。字符串默認也是 ASCII ,如果代碼文件頭聲明了其它編碼格式(如 GBK),那字符串就使用聲明的編碼格式,在內存中不會自動轉成 Unicode。

Python3 中默認的編碼格式是 UTF-8。字符串的編碼格式是 Unicode,即使代碼文件頭聲明了其它編碼格式,在內存中也會轉換為 Unicode。

Windows 系統中文版默認編碼是 GBK,Linux 系統默認編碼是 UTF-8。

# Python2指明編碼格式:
# -*- coding:utf-8 -*-

計算機系統通用的字符編碼工作方式:
在計算機內存中,統一使用 Unicode 編碼,當需要保存到硬盤或者需要網絡傳輸的時候,就轉換為 UTF-8 編碼。無論以什么編碼在內存中顯示字符,最終保存到硬盤上都是二進制(不同編碼轉成的二進制不同)。存儲和讀取的編碼必須都要保持一致。

ASCII 轉二進制的過程
把字符串拆分成單個字符,對照 ASCII 表把單個字符轉成十進制,再把十進制轉成二進制,每個字符最終轉換成二進制后都是由 8 位的規則來組成的,不足 8 位的在二進制的左邊補零從而成 8 位。

ASCII轉二進制
ASCII碼 十進制 二進制
Python 80 121 116 104 111 110 01010000 01111001 01110100 01101000 01101111 01101110

可以使用 ord() 和 bin() 函數進行驗證

# 字符對應的十進制整數
>>> ord('P')
80
>>> ord('y')
121
>>> ord('t')
116
>>> ord('h')
104
>>> ord('o')
111
>>> ord('n')
110
#十進制整數對應的二進制
>>> bin(80)
'0b1010000'
>>> bin(121)
'0b1111001'
>>> bin(116)
'0b1110100'
>>> bin(104)
'0b1101000'
>>> bin(111)
'0b1101111'
>>> bin(110)
'0b1101110'


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM