字元編碼學習筆記

2021-06-19 17:34:52 字數 2116 閱讀 7616

1.編碼方式(數字 -------------------> 代表什麼 ---------------> 顯示為什麼)

編碼(ascii,gbk,unicode) 

字型檔案(編碼,點陣字型)

所謂的編碼,是用預先規定的方法將文字、數字或其他物件程式設計數碼。

ascii碼:用乙個位元組的低七位來表示英文本元、數字和其他一些符號。也就是

說我們看到的這些字元、數字在計算機中都有對應的碼值,例如字元'a'對應的

ascii碼為0x41.在當時使用ascii碼就可以解決所有的字符集。

國標碼(gbk):對於內陸人使用的是漢字,採用的是國標碼,使用兩個位元組來代表

乙個漢字。

unicode編碼:為了解決全世界統一的編碼方式,採用了unicode編碼,這個表給出

這個表給出了某個數值與字元的關係;某個數字**某個符號。而這個編碼表是

如何表示它呢?(比如說用3個位元組表示乙個unicode編碼,這種方法顯然是很浪費的)

因此如何來表示unicode編碼出現了多種方式:utf-8 utf-16

2.乙個例子

將含有abc字元的檔案依次儲存為ascii,utf-8,utf-16格式,然後用ue開啟,檢視

其內容。

ascii:  

00000000:  61 62 63 ;abc 《使用乙個位元組進行編碼》

utf-8:  

00000000:  ef bb bf 61 62 63 ;abc  

utf-16-le: 00000000:  ff fe 61 00 62 00 63 00 ;abc 《使用兩個位元組來表示unicode編碼》

utf-16-be: 

00000000:  fe ff 00 61 00 62 00 63 ;abc

在以上檔案中加上"中"

ascii:  

00000000:  61 62 63 d6 d0 ;abc 《使用乙個位元組進行編碼,使用國標碼》

utf-8:  

00000000:  ef bb bf 61 62 63 e4 b8 ad;abc  

utf-16-le: 00000000:  ff fe 61 00 62 00 63 00 4e 2d;abc 《使用兩個位元組來表示unicode編碼,為unicode編碼》

utf-16-be: 

00000000:  fe ff 00 61 00 62 00 63 2d 4e;abc

3.utf-8是如何來表示unicode?

中 : e4 b8 ad 11100100 10111000 10101101 是一種變長的儲存方式

第乙個位元組的前n位為1,n+1位為0表示用n個位元組來表示該字元的unicode編碼

後面的n-1個位元組的前2位都為10,剩下的這些值用來表示該字元的unicode值

由此可知"中"的unicode 0100111000101101

utf-8使用最普遍,其優點:

變長儲存

具有容錯性,即便出錯也只會導致若干個亂碼,如果是utf-16,其中乙個錯誤

會導致整個檔案遭到破壞。

4.乙個現象的分析?

當我們使用putc(char ch)從開發板的的串列埠發出乙個字元'a',是如何在我們

的windows終端顯示出'a'來的?

字元是以其ascii碼進行儲存的,因此通過串列埠線傳輸的實際上是字元'a'的

ascii碼0x41,而我們windows終端軟體接收到這個ascii碼時,如何顯示是要

通過查詢儲存在系統中的字型庫檔案,字型庫檔案中包括字元的碼值和字元的

字型點陣資料,通過查詢字型檔案最終將該碼值對應的字型點整資料顯示在螢幕

上。如何得知乙個字型檔案中含有字型編碼值?

我們設定ue中某個檔案的字型時,就會有字符集選擇,字符集就是字元編碼的

方式:當我們設定字型為黑體時,字符集中就有chinese_gb2312

5.乙個c源**用不同的(編碼方式)字符集儲存,會導致執行結果不一致?

這顯然是不應該出現的,解決方法:編譯程式時應該指定一些引數

finput charset= charset 表示原始檔的編碼方式,預設為utf-8來解析

fexec charset = charset 表示可執行程式裡的字元以什麼方式來解析,預設為utf-8

python學習筆記之字元編碼

最近在看 python核心程式設計第三版 wesley chun的書,在練習過程中發現第二章網路程式設計關於tcp和udp的例子在python 3.6.0 的環境下竟然無法正常執行,如是上網搜尋相關資料終於講問題弄明白了。參考資料 大體原因是python3.3之後python對字元處理做了比較大的改...

字元編碼筆記

在用python處理多個檔案的時候,裡面存有不同編碼,使用晚上copy的編碼判斷也不好使,而我的目的也很簡單,就是在第二行加入一串文字,比如123456.那麼,在不同編碼下是否能通過讀取二進位制位元組的方式判斷到 n呢?結論在我們中文編碼和utf8中,是可以的,實際上所有的非可見字元都是可以的編碼都...

字元編碼筆記

1.ascii碼和非ascii碼 ascii碼 我們知道,在計算機內部,所有的資訊最終都表示為乙個二進位制的字串。每乙個二進位制位 bit 有0和1兩種狀態,因此八個二進位制位就可以組合出256種狀態,這被稱為乙個位元組 byte 也就是說,乙個位元組一共可以用來表示256種不同的狀態,每乙個狀態對...