2

我試圖獲得對Windows代碼頁的含義的基本理解。我有種感覺,它是給定字符圖形的給定8位值和某種「抽象」之間的翻譯。什麼是Windows代碼頁?

我做了下面的實驗。我用變音符號創建了兩個帶有字母u的字符字符。一個是使用ALT 129(使用代碼頁437)值創建的,另一個是使用ALT 0252(使用代碼頁1252)值創建的。當我檢查字面兩個字符的值爲252

爲252通用8位抽象的U帶變音符?它是Unicode值嗎?

除了鍵盤輸入是否有任何的庫函數或者系統調用使用的代碼頁? 例如,是否有函數使用給定的代碼表來轉換字符串(如上面的ALT 129值)?

回答

3

Windows代碼的頁面是預先的Unicode天的遺物,在與不同的字符的語言仍然會嘗試使用一個(或兩個在亞洲的情況下),他們的字節來表示。這是字符集的概念發揮作用的地方。例如,英語是「windows-1252」。各種代碼頁可以通過區域&語言選項控制面板進行安裝。代碼頁的列表可以在這裏找到 - http://msdn.microsoft.com/en-us/goglobal/bb964654.aspx

在.NET中,通過System.Text.Encoding類訪問代碼頁。這提供了從一個代碼頁轉換到另一個代碼頁的方法。例如,將字符串轉換在Windows 1252爲utf8(當然通常是相當無意義的練習),你可以使用此代碼:

using System.Text; 

public string GetUtf8StringFromDefaultEncoding(string target, string codePage) { 
    Encoding windows = Encoding.GetEncoding(codePage); 
    byte[] windowsBytes = windows.GetBytes("Hello World"); 
    string utf8String = new UTF8Encoding().GetString(windowsBytes); 
    return utf8String; 
} 

public static void Main() { 
    Console.Out.WriteLine(GetUtf8StringFromDefaultEncoding("Hello World", 
          "windows-1252")); 
} 
+0

是否有任何Windows系統程序或庫函數從C++調用與代碼頁的工作? – 2010-04-07 12:49:59

+0

我不完全確定,但快速查看msdn網站建議此鏈接 - http://msdn.microsoft。com/en-us/library/dd374085%28VS.85%29.aspx – 2010-04-07 18:57:24

1

Windows代碼頁類似於代碼集,如ISO 8859-1。它將某些數字(字符如何存儲在磁盤上)映射到某些字形(以抽象的方式顯示在屏幕上的字符)。它不直接對應於字體 - 儘管字體可能支持給定的代碼集或代碼頁。例如,Courier New和Times Roman字體都可用於顯示CP1252,並且它們在屏幕上看起來不同,即使磁盤上的數據可能相同。

編碼,它的前256個碼點是相同的ISO 8859-1的代碼點。在ISO 8859-1中,代碼點252(0xFC)是帶有DIAERESIS的拉丁語小寫字母(通俗地說,帶變音符號或'ü')。

有代碼集轉換函數; ICU支持一些。有特定於Windows的代碼集轉換器,我毫不懷疑;我只是不知道他們的名字是什麼。它將部分取決於您使用哪種語言。

0

甲窗口代碼頁是一個8位的值轉換爲一個字符的裝置。美國大多數Windows計算機使用Windows-1252

較新的Windows程序通常使用UTF-8來存儲文本文件,並在內部使用寬字符串UTF-16。這消除了代碼頁的問題,因此在匈牙利編寫的文本文件在美國開放時看起來是相同的。

1

Here是Unicode和字符集的必讀說明(包括喬爾Spolsky的代碼頁

+1

+1爲優秀Spolsky鏈接。這真是每個程序員應該知道的最基本的信息,以一種有趣的方式呈現。簡化並不等於謊言,因爲經常發生簡化。 – 2010-04-16 20:25:25