ansi編碼

ansi編碼

不同的國家和地區制定了不同的標準,由此產生了 GB2312、GBK、Big5、Shift_JIS 等各自的編碼標準。這些使用 1 至 4 個位元組來代表一個字元的各種漢字延伸編碼方式,稱為 ANSI 編碼。在簡體中文Windows作業系統中,ANSI 編碼代表 GBK 編碼;在日文Windows作業系統中,ANSI 編碼代表 Shift_JIS 編碼。 不同 ANSI 編碼之間互不兼容,當信息在國際間交流時,無法將屬於兩種語言的文字,存儲在同一段 ANSI 編碼的文本中。 當然對於ANSI編碼而言,0x00~0x7F之間的字元,依舊是1個位元組代表1個字元。這一點是ANSI編碼與Unicode編碼之間最大也最明顯的區別。

基本信息

概念

ANSI(American National Standards Institute),中文:美國國家標準學會。

為使計算機支持更多語言,通常使用 0x80~0xFFFF 範圍的多個位元組來表示 1 個字元。比如:漢字 '中' 在簡體中文Windows作業系統中,使用 [0xD6,0xD0] 這兩個位元組存儲。對於ANSI編碼而言,0x00~0x7F之間的字元,依舊是1個位元組代表1個字元。這一點是ANSI編碼與UTF-16編碼之間最大也最明顯的區別。比如“A君是第131號”,在ANSI編碼中,占用12個位元組,而在UTF-16編碼中,占用16個位元組。因為A和1、3、1這4個字元,在ANSI編碼中只各占1個位元組,而在UTF-16編碼中,是需要各占2個位元組的。

漏洞

關於GBK編碼的BUG

很多細心的人會發現,新建一個空的文本檔案,用記事本打開(必須是Windows自帶的記事本),只輸入“聯通”二字保存關閉(輸入“1聯通”也是聯通顯示的也是亂碼),再重新打開時將是亂碼。

當txt文檔中一切字元都在 C0≤AA( 第一個位元組)≤DF 80≤BB( 第二個位元組)≤BF 這個範圍時,notepad都無法確認文檔的格式,自動依照GB-2312來解碼。 而"聯通"就是C1 AA CD A8,剛好在上面的範圍內,所以不能正常顯現。

記事本默認是以ANSI編碼保存文本文檔的,而正是這種編碼存在的bug招致了上述怪現象。假如保存時選擇Unicode、Unicode (Big Endian)、UTF-8編碼,就正常了。此外,假如以ANSI編碼保存含有某些特別符號的文本文檔,再次打開後符號也會變成英文問號。

相關詞條

相關搜尋

熱門詞條

聯絡我們