编码gbk的不可映射字符_Python基础:编码表和字符的故事
在計算機內部,都是每8位組成的一個個字節,比如我們使用"abc".encode()把abc轉化成二進制byte類型,注意byte是不可變類型:
編碼過程
>>> abc.encode() # 把str字符變為bytes字節類型;字符是一個個連接的,轉化出來的bytes也是一個個連續的。 b'abc' >>> "阿".encode("utf-8") # 一個漢字 uft-8里多是3個字節 b'xe9x98xbf' >>> "阿".encode("gbk") # 一個漢字 gbk里是2個字節 b'xb0xa2'解碼過程
>>> b'xe9x98xbf'.decode() #使用默認的utf-8 進行解碼 '阿' >>> b'xb0xa2'.decode("gbk") # 因為剛才是用gbk編碼的,我們就用gbk解碼,否則就會亂碼 '阿' >>> b'abc'.decode() # **這里要注意不要看這里的abc**,這里的abc只是一種展現形式, #因為這只是二進制的展示形式 'abc'ASCII 碼
從0到127,共128種變化。它是用1個字節(1個字節有8位)表示的。 關于8位,就是從0000 0000到1111 1111組成的數字,最高位不動,剩下的低7位變化,所以共有(2的8次方,1 0000 0000,即128)種狀態,即0-127,其中127對應的就是0FFF FFFF。
為了用計算機表達字符,人們建了對照表。 比如1,對于計算機來說,計算機里原本是0000 0001,我們告訴計算機不要把0100 0001當65看了,請把它當a看
計算機中,內存只能保存數字,那對于文字該怎么辦呢? 對于文字 我們告訴內存這個東西請當做文字處理而不是數字; 那么,我們就要給計算機一個表,這個表的本質就是數值和字符的對應映射關系
類似這樣比較常見建議背誦的有: - 09>>> TAB
>>> c = "t" # 轉義字符的tab >>> c 't' >>> c = "x09" # 十六進制的9 >>> c 't'- 0d0a >>> 回車換行 # 即十進制的1310
- 0x20>>>空格 即decimal 32
- 阿拉伯數字0x31 >>>字符1 即decimal 49
- A >>> 0x41 即 65
- a>>> 0x61 即97
大小規則 常見ASCII碼的大小規則:09<AZ<a~z。 1)數字比字母要小。如 “7”<“F”; 2)數字0比數字9要小,并按0到9順序遞增。如 “3”<“8” ; 3)字母A比字母Z要小,并按A到Z順序遞增。如“A”<“Z” ; 4)同個字母的大寫字母比小寫字母要小32。如“A”<“a” 。 幾個常見字母的ASCII碼大小: “A”為65;“a”為97;“0”為 48 [4] 。
單字節的故事:歐美國家
ASCII碼0-127低8位解決了英語問題,歐洲法國德國俄國西班牙等,就用了高8位,各自解決了自己的信息化問題:即==低8位兼容ascii碼,高8位各自為政== 高八位加低八位共一個字節。
雙字節的中文GB2312>>GBK
僅僅能夠解決英美國家拉丁文等字母文字的編碼,但無法解決中文體系的方塊字,因為方塊字的數量太多了。一個字節不夠,于是我們開始使用2個字節即65536種狀態表達漢字。 為了兼容ASCII碼,漢字是把雙字節的每一個0x80之前的都讓過的。比如啊,xb0xa1,每個字節都高于0x800x80。 GB2312漢字數量較少(也包含了部分日文),最后發展成了GBK,現在window內部使用額就是雙字節的GBK。
雙字節的統一:unicode
Unicode和iso都可以實現用雙字節把全世界已知字符收錄,后來合二為一成為Unicode。 Unicode和GBK之間存在映射關系
互聯網時代,雙字節的進化-utf-8
Unicode始終是雙字節,這樣本來用單字節表達的字母,也需要用雙字節,影響了網絡時代的網絡傳輸。 于是適應網絡時代的utf-8出現了,utf-8有1-6個字節兼容了所有字節,ascii碼依然是單字節;中文字符大多落在3個字節。
last not the least: str在字符的世界中,是有編碼的,要查編碼表; bytes在字節的世界里,只有一個個字節,沒有編碼。
今日雞湯: 標準之爭才是至高爭奪。總結
以上是生活随笔為你收集整理的编码gbk的不可映射字符_Python基础:编码表和字符的故事的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 就在今天:《英雄联盟》LPL 2023
- 下一篇: 指引芯片50多年的摩尔定律被指失效 台积