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