什么是Windows代码页?

时间:2010-04-06 01:42:27

标签: windows internationalization character-encoding definition

我正在尝试基本了解Windows代码页的含义。我觉得它是给定字符图形的给定8位值和某些“抽象”之间的转换。

我做了以下实验。我创建了一个“”字符文字,带有两个版本的字母u和一个变音符号。一个使用ALT 129(使用代码页437)值创建,一个使用ALT 0252(使用代码页1252)值。当我检查文字时,两个字符的值都为252。

对于带有变音符号的u来说252是通用的8位抽象吗?它是Unicode值吗?

除了键盘输入之外,还有使用代码页的库例程或系统调用吗? 例如,是否存在使用给定代码表转换字符串的函数(如上所述,ALT 129值)?

4 个答案:

答案 0 :(得分:3)

Windows代码页是unicode前天的遗留物,当具有不同字符的语言仍然会尝试使用一个(或亚洲情况下为两个)字节来表示它们时。这就是角色集的概念发挥作用的地方。例如,英语是“windows-1252”。各种代码页可以通过Regional& amp;语言选项控制面板。可以在此处找到代码页列表 - 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"));
}

答案 1 :(得分:1)

Windows代码页类似于ISO 8859-1等代码集。它将某些数字(字符如何存储在磁盘上)映射到某些字形(屏幕上出现的字符,以抽象的方式)。它不直接对应于字体 - 尽管字体可能支持给定的代码集或代码页。例如,Courier New和Times Roman字体都可用于显示CP1252,它们在屏幕上看起来不同,即使磁盘上的数据可能相同。

Unicode的前256个代码点与ISO 8859-1的代码点相同。在ISO 8859-1中,代码点252(0xFC)是带有DIAERESIS的LATIN SMALL LETTER U(俗称,u-with-umlaut或'ü')。

有代码集转换功能; ICU支持一些。有Windows特定的代码集转换器,我毫不怀疑;我只是不知道他们的名字是什么。它部分取决于您使用的语言。

答案 2 :(得分:1)

Here是来自Joel Spolsky的Unicode和字符集(包括代码页)的必读解释

答案 3 :(得分:0)

Windows代码页是将8位值转换为字符的方法。美国大多数Windows计算机都使用Windows-1252

较新的Windows程序通常使用UTF-8来存储文本文件,并在内部使用UTF-16的宽字符串。这消除了代码页问题,因此在美国打开时,在匈牙利编写的文本文件看起来会一样。