字元編碼總結

2021-04-03 00:32:27 字數 1743 閱讀 6025

各種編碼的檔案頭:ff、fe(unicode),fe、ff(unicode big endian),ef、bb、bf(utf-8)。

unicode也是一種字元編碼方法,不過它是由國際組織設計,可以容納全世界所有語言文字的編碼方案。unicode的學名是"universal multiple-octet coded character set",簡稱為ucs。從unicode2.0開始,unicode專案採用了與iso 10646-1相同的字型檔和字碼。

1.unicode:每個字元都使用兩個位元組編碼,所以它是定長的編碼格式,「漢」的unicode編碼為 "/u6c49" ,「a」的unicode編碼是"/u0061"。在編譯成class檔案時,不管編譯器裡使用gbk編碼還是utf-8編碼 編輯**,最後在class檔案裡儲存的是字元的unicode編碼,應該是在編譯的時候將其他編碼轉換成了unicode編碼。

2.gb2312和gbk:中文字元都使用兩個位元組編碼,英文本元都使用乙個位元組編碼,gb2312時gbk編碼的子集,「漢」的這兩種編碼都是 baba,可以通過 區位碼高位和低位分別加上a0得到gb2312碼。

3.utf-8:

utf-8就是以8位為單元對ucs進行編碼。從ucs-2到utf-8的編碼方式如下:

ucs-2編碼(16進製制)

utf-8 位元組流(二進位制)

0000 - 007f

0******x

0080 - 07ff

110***xx 10******

0800 - ffff

1110***x 10****** 10******

unicode編碼小於0x0080的使用乙個位元組的模版轉換成utf-8編碼,大於等於0x0080小於0x0800的使用兩個位元組的模版轉換,大於等於0x0800小於等於0xffff的使用三個位元組的模版轉換。

例如「漢」字的unicode編碼是6c49。6c49在0800-ffff之間,所以肯定要用3位元組模板了:1110***x 10****** 10******。將6c49寫成二進位制是:0110 110001 001001, 用這個位元流依次代替模板中的x,得到:11100110 10110001 10001001,即e6 b1 89。

ucs只是規定如何編碼,並沒有規定如何傳輸、儲存這個編碼。例如「漢」字的ucs編碼是6c49,我可以用4個ascii數字來傳輸、儲存這個編碼;也可以用utf-8編碼:3個連續的位元組e6 b1 89來表示它。關鍵在於通訊雙方都要認可。utf-8、utf-7、utf-16都是被廣泛接受的方案。utf-8的乙個特別的好處是它與iso-8859-1完全相容。utf是「ucs transformation format」的縮寫。

**分析:

1:     string s="漢";

byte bytes=s.getbytes();

for(int i=0;i2:    string s="漢";

byte bytes=null;

try catch (unsupportedencodingexception e)

for(int i=0;i**一在手機上執行時,bytes陣列的長度為1,值為3f,result的值是字串"?",也就是對中文字串"漢"的unicode編碼沒有得到相應的碼值,如果在pc上執行則得到gbk的碼值,兩個位元組分別是 高位:ab 低位:ab。

**二在手機上和pc上得到相同的結果,bytes陣列的長度是3,三個位元組分別是e6, b1, 89,也就是得到了中文字元的正確的utf-8碼值。

字元編碼總結

ascii 0 127 gb2312 0xa1a1 f7fe兩個位元組,是對ascii的補充,同時也把ascii中的字元編進 去,成全角字元。gbk 是對gb2312的一種補充,收錄的漢字範圍更大。gb2312標準共收錄6763個 漢字,其中一級漢字3755個,二級漢字3008個 gbk共收入218...

字元編碼總結

編碼字符集 表示某種編碼所涉及到字元的集合。例如ascii字符集 gb2312字符集。僅表示集合,集合元素 即字元 按照某種順序排放,並編上序號。如unicode。字元編碼 把字符集中的字元編碼為二進位制,用來表示字符集中的字元,是字符集的實現方式。如utf 8,utf 16,utf 32就是uni...

字元編碼問題總結

字元編碼或者字符集由編碼組成,使得某一字串行匹配於一指定集合中某一東西,例如可能顯示為一種自然數序列,交流所用的字母表或者字音表 到乙個給定的集合中的其它東西,如乙個自然數序列 8位位元組或者電脈衝,以便於文字在計算機中的儲存和通過通訊網路的傳送。常見的例子包括將拉丁字母表編碼成一些列長短發報電鍵的...