概念
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編碼保存含有某些特別符號的文本文檔,再次打開後符號也會變成英文問號。