全球化(3):编码和代码页

      代码页是一个选定字符代码的列表,字符表示为以某个特定的顺序排列的码位。代码页通常会定义为支持特定的语言或那些共享公用书写系统的语言组。所有的 Window 代码页只能包含 256 个码位。大多数前 127 个码位都表示相同的字符。这是为保证连续性和旧代码预留的码位。代码页在后面的 128 个码位 128-255(以 0 为基数)有着显著的不同。

      例如,代码页 1253 为希腊语书写系统提供所需的字符代码,而代码页 1250 为拉丁语书写系统(包括英语、德语和法语)提供字符。后 128 个码位中包含重音字符或希腊语字符。因此不能将希腊语和德语存储在同一代码流中,除非您放置某些类型的标识符来指明所引用的代码页。

      在处理亚洲字符集时情况更为复杂。由于中文、日语和韩语包含的字符超过 256 个,,因而需要开发一种不同的方案,但该方案必须以 256 个字符的代码页为基础。因此 DBCS(双字节字符集)应运而生。每个亚洲字符都由一对码位表示(因此为双字节)。为支持编程,将留出一组码位表示该集的第一个字节但不赋值(除非后面紧跟已定义的第二个字节)。DBCS 意味着您必须编写可将这些码位对视为一个码位的代码,但这样仍无法在同一数据流中组合日语和中文,因为在不同代码页中,相同的双字节码位代表不同的语言中的不同字符。

      为了在同一数据流中存储不同的语言,需要创建Unicode。该“代码页”可表示 64000 多个字符,现在由于引入了代理项,它可以表示 1,000,000,000 多个字符。Windows 2000 中使用了 Unicode 后可轻松地创建全球通用的代码,因为您无需再担心寻址哪个代码页,也不必再担心是否需要归组字符码位来表示一个字符。

     .NET Framework中的编码

      .NET Framework 是一个用于构建、部署和运行 Web 服务及应用程序的平台,它提供了基于标准的高效多语言环境,可将现有或原有的投资与下一代应用程序和服务集成到一起。.NET Framework 用 Unicode UTF-16 表示字符,但在某些情况下其内部使用UTF-8。System.Text 命名空间提供可用于编码和解码字符的类,并包括含以下编码的支持:

  • Unicode UTF-16 编码。使用 UnicodeEncoding 类在字符与 UTF-16 编码之间进行转换。
  • Unicode UTF-8 编码。使用 UTF8Encoding 类在字符与 UTF-8 编码之间进行转换。
  • ASCII 编码。ASCII 将拉丁字母字符集编码为 7 位字符。由于此编码仅支持从 U+0000 到 U+007F 的字符值,因此大多数情况下不适用于国际化应用程序。当您需要与旧编码和系统进行互动时,可以使用 ASCIIEncoding 类在字符和 ASCII 编码之间进行转换。
  • Windows/ISO 编码。System.Text.Encoding 类提供对多种 Windows/ISO 编码的支持。

     .NET Framework 支持使用代码页编码的数据。您可以使用 Encoding.GetEncoding 方法 (Int32) 为指定的代码页创建目标编码对象。将某个代码页数码指定为 Int32 参数。

      网页中的编码

     设置 Web 页面的字符集或编码一般有四种方法。

  • 使用此方法时,您可以从支持的代码页列表中进行选择以创建您自己的 Web 内容。这种方法的弊端是您被限定于所选字符集所包括的语言,无法实现真正的多语言 Web 内容。您只能处理单一脚本的 Web 页面。
  • 数字实体可用于表示当前选定代码页或编码范围之外的一些符号。例如,假设您决定利用前一种方法和拉丁语 ISO 字符集 8859-1 创建一个 Web 页面。现在您想在某个算式等式中显示一些希腊语字符,但拉丁语代码页中并不包含希腊语字符。例如,选用希腊语字符 Φ(具有 Unicode 码位 U+03A6)。在此码位的十进位制数实体前放置 &#,则该字符的输出如下:This is my text with a Greek Phi:Φ。而输出为:This is my text with a Greek Phi:Φ。遗憾的是此方法无法编排大量文本,使编辑您的 Web 内容变得非常困难。
  • 在 Win32 应用程序中,UTF-16 是迄今为止最好的方法,但对于 Web 内容,只能在完全支持 Unicode 的 Windows NT 网络中安全使用 UTF-16。因此,对于那些不清楚是否有客户端 Web 浏览器和网络 Unicode 支持的 Internet 站点,建议不使用此编码。
  • 对于多语言 Web 页面,Unicode 编码是最好且最安全的方法。使用此方法可编码整套 Unicode 字符。此外,Internet Explorer 4 和 Netscape 4 以后的所有版本都将支持此编码,此功能不受网络或线路功能的限制。利用 UTF-8 编码无需根据目标语言更改编码即可创建多语言 Web 内容。
posted @ 2010-12-06 22:32  Asharp  阅读(674)  评论(0编辑  收藏  举报