GB2312及UTF8編碼【轉(zhuǎn)】
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
漢字區(qū)位碼:將漢字定義在一個(gè)94行,94列的表中,常用漢字在16-55行,其他漢字在56-87行,符號(hào)在1-9區(qū),其他行未定義,其中55行的第90列至94列未定義。比如,“萬”字的區(qū)位碼是 45 82, 在45行,82列。
漢字國(guó)標(biāo)碼:又稱交換碼,是一個(gè)碼集。將區(qū)位碼的十進(jìn)制行列值轉(zhuǎn)換成16進(jìn)制,再分別加上20H得到。舉例:將“萬”的區(qū)位碼轉(zhuǎn)換為16進(jìn)制表示:2D 52,分別加上20H得:4D 72,即為國(guó)標(biāo)碼。 由此,漢字第一個(gè)字節(jié)的最小值:10H + 20H =30H, 最大值:57H + 20H = 77H 第二個(gè)字節(jié)最小值: 01H + 20H = 21H, 最大值: 5EH + 20H = 7EH GB2312:是一種編碼方式,由于國(guó)標(biāo)碼和ASC(00H-80H)碼重疊,導(dǎo)致計(jì)算機(jī)無法識(shí)別,為解決此問題,將國(guó)標(biāo)碼的每個(gè)字節(jié)最高位置1,使得每個(gè)字節(jié)大于80H,從而與ASC碼區(qū)分,這樣英文字符和漢字在同一個(gè)文件中可以區(qū)分開。 由此GB2312編碼的漢字第一個(gè)字節(jié)最小值:30H | 80H = B0H, 最大值:77H | 80H = F7H 第二個(gè)字節(jié)的最小值: 21H | 80H = A1H, 最大值:7EH | 80H = FEH 因此,GB2312的編碼范圍是:B0A1H 到 F7FEH,B0A1H到F7FEH可以容納18269個(gè)字符,而實(shí)際只用了6763個(gè)漢字,所以GB2312碼并非完全碼,存在浪費(fèi)。 根據(jù)GB2312碼可以反推區(qū)位碼,在PHP4.0時(shí)代,由于GD庫(kù)不支持漢字,很多程序就是利用GB2312編碼反推區(qū)位碼,然后根據(jù)區(qū)位碼獲取字體文件中漢字的字符點(diǎn)陣數(shù)據(jù),然后畫圖。 GBK:是GB2312的擴(kuò)充,兼容GB2312,包括了20292個(gè)漢字。采用雙字節(jié)編碼,編碼范圍是 8140H 到 FEFEH,可見第一個(gè)字節(jié)大于80H,可以和ASC碼區(qū)分開,第二個(gè)字節(jié)和ASC碼存在重疊部分,但可以根據(jù)前一個(gè)字節(jié)是否大于80H進(jìn)行判定,因此GBK碼是兼容ASC碼的。 各類編碼的范圍: 編碼 區(qū)位碼 國(guó)標(biāo)碼 GB2312 Unicode:目前采用兩個(gè)字節(jié)編碼,理論上可以表示65535個(gè)字符,ASC碼也采用兩字節(jié)編碼,在每個(gè)ASC碼前加00H。Unicoe和漢字區(qū)位碼沒有任何關(guān)系,只是在65535字符空間的范圍內(nèi)分配了20902個(gè)字符給漢字。要將Unicode轉(zhuǎn)換為GB2312或GBK,需要一個(gè)映射表,目前網(wǎng)上有各種映射表,可以方便的將Unicode碼轉(zhuǎn)換為區(qū)位碼、國(guó)標(biāo)碼、GB2312碼等。 提供一個(gè)下載鏈接:http://www.haible.de/bruno/charsets/conversion-tables/GB2312.tar.bz2 UTF-8:直接采用Unicode碼的編碼稱為UTF-16,由于UTF-16中含有00H,對(duì)于像Unix這樣的操作系統(tǒng),00H具有特別的意義,容易出現(xiàn)問題。UTF-8很好的解決了這個(gè)問題,通過對(duì)Unicode進(jìn)行編碼,ASC碼仍然采用單字節(jié)表示。 該文章在 2010/12/15 0:12:00 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |