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