久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

代碼頁Code Page

 Fredanf 2012-03-24

代碼頁Code Page

微軟為了適應世界上不同地區(qū)用戶的文化背景和生活習慣,,在Windows中設計了區(qū)域(Locale)設置的功能,。Local是指特定于某個國家或地區(qū)的一組設定,,包括代碼頁,數(shù)字,、貨幣,、時間和日期的格式等。在Windows內(nèi)部,,其實有兩個Locale設置:系統(tǒng)Locale和用戶Locale,。系統(tǒng)Locale決定代碼頁,用戶Locale決定數(shù)字,、貨幣,、時間和日期的格式。我們可以在控制面板的“區(qū)域和語言選項”中設置系統(tǒng)Locale和用戶Locale:

每個Locale都有一個對應的代碼頁,。Locale和代碼頁的對應關系,,大家可以參閱我的另一篇文章《談談Windows程序中的字符編碼》的附錄1。系統(tǒng)Locale對應的代碼頁被作為Windows的默認代碼頁,。在沒有文本編碼信息時,,Windows按照默認代碼頁的編碼方案解釋文本數(shù)據(jù)。這個默認代碼頁通常被稱作ANSI代碼頁(ACP),。

ANSI代碼頁還有一層意思,,就是微軟自己定義的代碼頁。在歷史上,,IBM的個人計算機和微軟公司的操作系統(tǒng)曾經(jīng)是PC的標準配置,。微軟公司將IBM公司定義的代碼頁稱作OEM代碼頁,在IBM公司的代碼頁基礎上作了些增補后,,作為自己的代碼頁,,并冠以ANSI的字樣。我們在“區(qū)域和語言選項”高級頁面的代碼頁轉換表中看到的包含ANSI字樣的代碼頁都是微軟自己定義的代碼頁,。例如:

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 - 拉丁文 I) 
1253 (ANSI - 希臘文) 
1254 (ANSI - 土耳其文) 
1255 (ANSI - 希伯來文) 
1256 (ANSI - 阿拉伯文) 
1257 (ANSI - 波羅的海文) 
1258 (ANSI/OEM - 越南) 
在UniToy中,,我們可以按照代碼頁編碼順序查看這些代碼頁的字符和編碼:

我們不能直接設置ANSI代碼頁,只能通過選擇系統(tǒng)Locale,,間接改變當前的ANSI代碼頁,。微軟定義的Locale只使用自己定義的代碼頁。所以,,我們雖然可以通過“區(qū)域和語言選項”中的代碼頁轉換表安裝很多代碼頁,,但只能將微軟的代碼頁作為系統(tǒng)默認代碼頁。

在Windows 2000以后,,Windows統(tǒng)一采用UTF-16作為內(nèi)部字符編碼?,F(xiàn)在,安裝一個代碼頁就是安裝一張代碼頁轉換表。通過代碼頁轉換表,,Windows既可以將代碼頁的編碼轉換到UTF-16,,也可以將UTF-16轉換到代碼頁的編碼。代碼頁轉換表的具體實現(xiàn)可以是一個以nls為后綴的數(shù)據(jù)文件,,也可以是一個提供轉換函數(shù)的動態(tài)鏈接庫,。有的代碼頁是不需要安裝的。例如:Windows將UTF-7和UTF-8分別作為代碼頁65000和代碼頁65001,。UTF-7,、UTF-8和UTF-16都是基于Unicode的編碼方案。它們之間可以通過簡單的算法直接轉換,,不需要安裝代碼頁轉換表,。

在安裝過一個代碼頁后,Windows就知道怎樣將該代碼頁的文本轉換到Unicode文本,,也知道怎樣將Unicode文本轉換成該代碼頁的文本,。例如:UniToy有導入和導出功能。所謂導入功能就是將任一代碼頁的文本文件轉換到Unicode文本,;導出功能就是將Unicode文本轉換到任一指定的代碼頁,。這里所說的代碼頁就是指系統(tǒng)已安裝的代碼頁:

其實,如果全世界人民在計算機剛發(fā)明時就統(tǒng)一采用Unicode作為字符編碼,,那么代碼頁就沒有存在的必要了,。可惜在Unicode被發(fā)明前,,世界各國人民都發(fā)明并使用了各種字符編碼方案,。所以,Windows必須通過代碼頁支持已經(jīng)被廣泛使用的字符編碼,。從這種意義看,,代碼頁主要是為了兼容現(xiàn)有的數(shù)據(jù)、程序和習慣而存在的,。

2.2 代碼頁實例
2.2.1 實例一:GB18030代碼頁
1.1節(jié)的“錯誤2”中演示了一個全被顯示成'?'的文件,。這個文件的數(shù)據(jù)是:

其實,這是一個包含了6個四字節(jié)字符的GB18030編碼的文件,。記事本按照GBK顯示這些數(shù)據(jù),,而GB18030的四字節(jié)字符編碼在GBK中是未定義的。Windows根據(jù)首字節(jié)范圍判斷出12個雙字節(jié)字符,,然后因為找不到匹配的轉換而將其映射到默認字符'?',。使用UniToy按照GB18030代碼頁導入這個文件,就可以看到:

這個GB18030編碼的文件是用UniToy創(chuàng)建的,,編輯Unicode文本,,然后導出到GB18030編碼格式,。

2.2.2 實例二:GBK和Big5的轉換
綜合使用UniToy的導入、導出功能就可以在任意兩個代碼頁之間轉換文本,。其實,,由于各代碼頁支持的字符范圍不同,我們一般不會直接在代碼頁間轉換文本,。例如將以下GBK編碼的文本:

直接轉換到Big5編碼,就會看到:

變成'?'的字符都是Big5編碼不支持的簡化字,。在從Unicode轉換到Big5編碼時,,由于Big5編碼不支持這些字符,Windows就用默認字符'?'代替,。在UniToy中,,我們可以先將簡體字轉換到繁體字,然后再導出到Big5編碼,,就可以正常顯示:

同理,,將Big5編碼的文本轉換到GBK編碼的步驟應該是:

將Big5編碼的文本導入到Unicode文本; 
將繁體的Unicode文本轉換簡體的Unicode文本,; 
將簡體的Unicode文本導出到GBK文本,。 

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報,。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多