刨根究底字符編碼之七——ANSI編碼與代碼頁(Code Page)

ANSI編碼與代碼頁(Code Page)

1、ANSI編碼

1.字體

如前所述,在全世界全部國家和民族的文字符號統一編碼的Unicode編碼方案問世以前,各個國家、民族爲了用計算機記錄並顯示本身的字符,都在ASCII編碼方案的基礎上,設計了各自的編碼方案。編碼

好比歐洲前後設計了EASCII和ISO/IEC 8859系列字符編碼方案;爲了顯示中文及相關字符,中國設計了GB系列編碼(「GB」爲「國標」的漢語拼音首字母縮寫,即「國家標準」之意)。spa

一樣,日文、韓文、世界各國文字都有它們各自的編碼。全部這些各個國家和地區所獨立制定的既兼容ASCII又互相不兼容的字符編碼,微軟統稱爲ANSI編碼。操作系統

因此,即便知道是ANSI編碼,還須要知道這是哪個國家的才能解碼;另外,也沒法用同一種ANSI編碼表示既有漢字、又有韓文的文本。命令行

2.翻譯

嚴格來講,ANSI的字面意思並不是字符編碼,而是美國的一個非營利組織——美國國家標準學會(American National Standards Institute)的縮寫。ANSI這個組織作了不少標準制定工做,包括C語言規範ANSI C,還有各國字符編碼對應的「代碼頁(code page)」標準。(具體什麼是代碼頁,詳見後文解釋)設計

ANSI規定簡體中文GB編碼的代碼頁是936,因此GB編碼又叫作ANSI code page 936(ANSI標準的代碼頁936),各國編碼之因此被微軟統稱爲ANSI編碼的緣由即在這裏。code

後來,或許是出於沿用統一的稱呼之目的,有些在當時還並未被ANSI定爲標準的代碼頁,也被微軟稱之爲ANSI代碼頁,好比CP943代碼頁。blog

在Windows系統的編碼處理中,ANSI編碼通常表明系統默認編碼方式,並且並非肯定的某一種編碼方式——在簡體中文操做系統中ANSI編碼默認指的是GB系列編碼(GB23十二、GBK、GB18030);在繁體中文操做系統中ANSI編碼默認指的是BIG5;在日文操做系統中ANSI編碼默認指的是Shift JIS,等等。可在系統區域設置的系統Locale中更改。get

(笨笨阿林原創文章,轉載請註明出處)

 

2、代碼頁(Code Page)

1.

代碼頁也稱爲「內碼錶」,是與特定語言的字符集相對應的一張表。操做系統中不一樣的語言和區域設置可能使用不一樣的代碼頁。

例如,微軟所用的ANSI代碼頁1252(CP1252)對應於ISO 8859-1字符集(即Latin-1字符集,但CP1252對Latin-1有擴展,其中編碼128~159也被定義了字符,這是與Latin-1字符集不一樣之處),用於英語和大多數歐洲語言(西班牙語和各類日耳曼/斯堪的納維亞語),而IBM所用的OEM代碼頁932(CP932)對應於Shift JIS字符集(但CP932對Shift JIS有擴展;另外,對應的微軟ANSI代碼頁爲CP943,也對Shift JIS有擴展),用於日本字符。

代碼頁通常與其所直接對應的字符集之間並不是徹底等同,每每由於種種緣由(好比標準跟不上現實實踐的須要)而會對字符集有所擴展。

2.

早期,代碼頁是IBM稱呼計算機的BIOS所支持的字符集編碼。當時通用的操做系統都是命令行界面的,這些操做系統直接使用BIOS提供的字符繪製功能來顯示字符(或者是一組嵌入在顯卡字符生成器中的字形)。這些BIOS代碼頁也被稱爲OEM代碼頁。

隨着圖形用戶界面操做系統的普遍使用(最初被廣爲接受的圖形用戶界面操做系統是Windows3.1),操做系統自己具備了字符繪製的功能。微軟因而在Windows操做系統沒有轉向UTF-16(UTF-16的推出要早於如今被廣爲承認的UTF-8)做爲編碼實現以前(即Windows2000發佈以前),定義了一系列支持不一樣國家和地區所制定的字符集的代碼頁,被稱做「Windows代碼頁」或「ANSI代碼頁」。表明性的是實現了ISO-8859-1(即Latin-1)的代碼頁1252(即CP1252),以及實現了GBK的代碼頁936(即CP936)。

3.

代碼頁能夠在從字符映射到單字節值或多字節值的表格中表現。注意,這裏的單字節值與多字節值指的是特定於系統平臺的物理意義上的字節序列,不是指與系統平臺無關的邏輯意義上的碼元序列。正由於這樣,代碼頁也被稱以內碼錶。

也就是說,代碼頁是字符集的具體實現,能夠將其理解爲一張「字符-字節」映射表,經過查表實現「字符-字節」的翻譯。

代碼頁主要用於字符在計算機中的存儲和顯示,好比,計算機讀取了一個二進制字節,那這個字節到底表明哪一個字符,就須要到指定的代碼頁中查找,這個查找的過程就被稱爲查表。

4.

代碼頁的指定在Windows中是系統默認設置的(即默認系統區域設置),也可在(Windows7的)「控制面板-區域和語言-管理-非Unicode程序的語言-更改系統區域設置」中選擇列表中的語言進行更改。

注意:系統區域設置System Locale可用於肯定在不使用Unicode編碼的程序中輸入和顯示信息的默認字符集和字體,這樣就可讓非Unicode程序在計算機上使用指定的語言得以正常運行。所以,在計算機上安裝某些非Unicode程序時,可能須要更改默認的系統區域設置。爲系統區域設置選擇不一樣的語言並不會影響Windows系統自己或其餘使用Unicode編碼的程序的菜單和對話框中的語言顯示。

(笨笨阿林原創文章,轉載請註明出處)

5.

早期在IBM和微軟內部使用數字來標記不一樣的字符集,不一樣的廠商對同一個字符集使用各自不一樣的名稱。

例如,UTF-8在IBM稱做代碼頁1208,在微軟稱做代碼頁65001,在SAP稱做代碼頁4110;Windows使用936代碼頁(Code Page 936,即CP936)、Mac系統使用EUC-CN代碼頁實現GBK字符集的編碼(EUC:Extended Unix Code;EUC-CN是類Unix系統中GBK編碼方案的別名,等同於Windows下的cp936代碼頁),名字雖然不同,但對於同一漢字的編碼確定是同樣的。

 

3、微軟Windows操做系統中ANSI代碼頁的設置

1.

微軟爲了適應世界上不一樣地區用戶的文化背景和生活習慣,在Windows中設計了區域(Locale)設置的功能。

Locale是指特定於某個國家或地區的一組設定,包括代碼頁,以及數字、貨幣、時間和日期的格式等。

在Windows內部,其實有兩個Locale設置:系統Locale和用戶Locale。系統Locale決定代碼頁,用戶Locale決定數字、貨幣、時間和日期的格式。

能夠在Windows控制面板的「區域和語言選項」中設置系統Locale(非Unicode程序的語言)和用戶Locale(標準和格式):

(Windows XP中的Locale設置)

  

(Windows 7中的Locale設置)

2.

系統Locale對應的代碼頁被做爲Windows的默認代碼頁。在沒有明確指定某個文本的編碼信息時,Windows將按照指定的默認代碼頁的編碼方案來解釋該文本數據。這個默認代碼頁一般被稱做ANSI代碼頁(ACP)。

在歷史上,IBM的我的計算機和微軟公司的操做系統曾經是PC的標準配置。微軟公司將IBM公司定義的代碼頁稱做OEM代碼頁,在IBM公司的代碼頁基礎上做了些增補後,稱爲ANSI代碼頁。

在Windows XP的「區域和語言選項」高級頁面的「代碼頁轉換表」中可看到各個語種的代碼頁(Windows7中已經不能直接看到了)。例如:

·874 (ANSI/OEM -泰文)

·932 (ANSI/OEM -日文Shift-JIS)

·936 (ANSI/OEM -簡體中文GBK)

·949 (ANSI/OEM -韓文)

·950 (ANSI/OEM -繁體中文Big5)

·1250 (ANSI -中歐)

·1251 (ANSI -西里爾文)

·1252 (ANSI -拉丁文)

·1253 (ANSI -希臘文)

·1254 (ANSI -土耳其文)

·1255 (ANSI -希伯來文)

·1256 (ANSI -阿拉伯文)

·1257 (ANSI -波羅的海文)

·1258 (ANSI/OEM -越南)

(笨笨阿林原創文章,轉載請註明出處)

 

預告:下一篇將開始正式講解Unicode編碼方案,敬請關注!】

相關文章
相關標籤/搜索