基础知识:字符编码
閱讀目錄
一、字符編碼
-
1、什么實字符編碼:將人識別的字符轉換成計算機能識別的01,而轉換的過程或者規則就是字符編碼表。
而這種字符編碼表表示了一種對應關系。
-
2、常用的字符編碼表有:ascii、unicode、GBK、Shift_JIS、Euc-kr
-
3、如何理解字符編碼
①、電腦三大核心:cpu -內存-硬盤
②、軟件及Python解釋器讀取文件過程:啟動–讀取–展示|解釋執行
計算機只認識數字
很明顯,我們平時在使用計算機時,用的都是人類能讀懂的字符(用高級語言編程的結果也無非是在文件內寫了 一堆字符),如何能讓計算機讀懂人類的字符?
必須經過一個過程:
字符--------(翻譯過程)------->數字
這個過程實際就是一個字符如何對應一個特定數字的標準,這個標準稱之為字符編碼
計算機由美國人發明,最早的字符編碼為ASCII,只規定了英文字母數字和一些特殊字符與數字的對應關系。最多只能用 8 位來表示(一個字節),即:2**8 = 256,所以,ASCII碼最多只能表示 256 個符號
當然我們編程語言都用英文沒問題,ASCII夠用,但是在處理數據時,不同的國家有不同的語言,日本人會在自己的程序中加入日文,中國人會加入中文。
而要表示中文,單拿一個字節表表示一個漢子,是不可能表達完的(連小學生都認識兩千多個漢字),解決方法只有一個,就是一個字節用>8位2進制代表,位數越多,代表的變化就多,這樣,就可以盡可能多的表達出不通的漢字
所以中國人規定了自己的標準gb2312編碼,規定了包含中文在內的字符->數字的對應關系。
日本人規定了自己的Shift_JIS編碼
韓國人規定了自己的Euc-kr編碼(另外,韓國人說,計算機是他們發明的,要求世界統一用韓國編碼,但世界人民沒有搭理他們)
因為此刻的各種標準都只是規定了自己國家的文字在內的字符跟數字的對應關系,如果單純采用一種國家的編碼格式,那么其余國家語言的文字在解析時就會出現亂碼
所以迫切需要一個世界的標準(能包含全世界的語言)于是unicode應運而生
ascii用1個字節(8位二進制)代表一個字符
unicode常用2個字節(16位二進制)代表一個字符,生僻字需要用4個字節
這時候亂碼問題消失了,所有的文檔我們都使用但是新問題出現了,如果我們的文檔通篇都是英文,你用unicode會比ascii耗費多一倍的空間,在存儲和傳輸上十分的低效
本著節約的精神,又出現了把Unicode編碼轉化為“可變長編碼”的UTF-8編碼。UTF-8編碼把一個Unicode字符根據不同的數字大小編碼成1-6個字節,常用的英文字母被編碼成1個字節,漢字通常是3個字節,只有很生僻的字符才會被編碼成4-6個字節。如果你要傳輸的文本包含大量英文字符,用UTF-8編碼就能節省空間
4、字符編碼總結:
unicode與utf-8采用的是一張unicode編碼表,utf-8是unicode編碼表體現方式,變長存儲數據
變長優點:(大量數據都是以英文存在,所以utf-8空間更小)傳輸速度更快
二、字符、編碼、解碼
u’ ’ Unicode字符串,默認字符
b’ ’ 字節字符串
s2 = b'abc123\xb7\xb7' print(s2)>>>b'abc123\xb7\xb7'r’ ’ 原義字符串,不對字符串內存做任何操作
s3 = r'abc你好\n不好' print(s3)>>>abc你好\n不好 #此時的換行符不起作用,因為原義字符串不做任何操作。編碼encode與解碼decode:
編碼:我們能看懂的 編給機器 看 的過程s='123哈哈' s1=bytes(s,encoding='utf-8') print(s1)>>>b'123\xe5\x93\x88\xe5\x93\x88'#結果解釋:這里的\x代表16進制的意思,一個16進制需要占用4個bit,所以2個16進制就是8個bit也就是1個字節(Bytes),所以\xe5代表2個16進制一個字節,\x93、\x88各代表2個16進制,一個字節。后面三個重復,所以用utf-8編碼,這里的一個漢字‘哈’占用3個字節 解碼:把機器能看懂的 解釋給我們人看的過程b1= b'\xe4\xbd\xa0\xe5\xa5\xbd' b2=str(b1,encoding='utf-8') print(b2)>>>你好編碼、解碼:
將u‘’字符串轉成b‘’字符串 編碼 u1=u'你好' b1=u1.encode('utf-8') print(b1)>>>b'\xe4\xbd\xa0\xe5\xa5\xbd' 將b‘’字符轉換成u‘’字符 解碼 b2=b'\xe4\xbd\xa0\xe5\xa5\xbd' u2=b2.decode('utf-8') print(u2)>>>你好三 、文件操作
待處理
總結
- 上一篇: 基础知识:元组、字典、集合
- 下一篇: 软件开发架构介绍||OSI七层协议之物理