面向公共语言运行库的应用程序使用编码将字符表示形式从本机字符方案(Unicode)映射为其他方案。应用程序使用解码将字符从非本机方案(非 Unicode)映射为本机方案。System.Text 命名空间提供了使您能够对字符进行编码和解码的类。System.Text 编码支持包括以下编码:
- Unicode UTF-32 编码
-
Unicode UTF-32 编码将 Unicode 字符表示为 32 位整数序列。您可以使用 UTF32Encoding 类在字符和 UTF-32 编码之间相互转换。
- Unicode UTF-16 编码
-
Unicode UTF-16 编码将 Unicode 字符表示为 16 位整数序列。您可以使用 UnicodeEncoding 类在字符和 UTF-16 编码之间相互转换。
- Unicode UTF-8 编码
-
Unicode UTF-8 编码将 Unicode 字符表示为 8 位字节序列。您可以使用 UTF8Encoding 类在字符和 UTF-8 编码之间相互转换。
- Unicode UTF-7 编码
-
Unicode UTF-7 编码将 Unicode 字符表示为 7 位字节 ASCII 字符的序列。非 ASCII Unicode 字符由 ASCII 字符的转义序列表示。UTF-7 编码是为支持某些需要 UTF-7 编码的协议而存在的,这些协议通常是电子邮件或新闻组协议。但是,UTF-7 并非特别安全或可靠。在某些情况下,更改一个位可能会完全改变对整个 UTF-7 字符串的解释。在其他情况下,几乎完全不同的 UTF-7 字符串可以对相同的文本进行编码。此外,对于包含非 ASCII 字符的序列,UTF-7 的空间利用效率比 UTF-8 低很多,而且编码/解码的速度较慢。因此,如果有其他选择,通常不应使用 UTF-7:UTF-8 通常应优先于 UTF-7。
可以使用 UTF7Encoding 类在字符和 UTF-7 编码之间相互转换。
- ASCII 编码
-
ASCII 编码将拉丁字母编码为单个 7 位 ASCII 字符。由于此编码仅支持从 U+0000 到 U+007F 的值,因此大多数情况下,对于国际化应用程序来说,它是不够的。您可以使用 ASCIIEncoding 类在字符和
ASCII 编码之间相互转换。有关在代码中使用 ASCIIEncoding 类的示例,请参见为基类型编码。
- ANSI/ISO 编码
-
System.Text.Encoding 类对范围较广的 ANSI/ISO 编码提供支持。
使用 Encoding 类
您可以使用 Encoding.GetEncoding 方法为指定的编码返回编码对象。可以使用 Encoding.GetBytes 方法以指定的编码将
Unicode 字符串转换为它的字节表示形式。
下面的代码示例使用 Encoding.GetEncoding 方法为指定的代码页创建目标编码对象。针对目标编码对象调用 Encoding.GetBytes 方法,可在目标编码中将 Unicode 字符串转换为它的字节表示形式。字符串的字节表示形式随即以指定的代码页显示出来。
using System; using System.IO; using System.Globalization; using System.Text; public class Encoding_UnicodeToCP { public static void Main() { // Converts ASCII characters to bytes. // Displays the string‘s byte representation in the // specified code page. // Code page 1252 represents Latin characters. PrintCPBytes("Hello, World!",1252); // Code page 932 represents Japanese characters. PrintCPBytes("Hello, World!",932); // Converts Japanese characters to bytes. PrintCPBytes("\u307b,\u308b,\u305a,\u3042,\u306d",1252); PrintCPBytes("\u307b,\u308b,\u305a,\u3042,\u306d",932); } public static void PrintCPBytes(string str, int codePage) { Encoding targetEncoding; byte[] encodedChars; // Gets the encoding for the specified code page. targetEncoding = Encoding.GetEncoding(codePage); // Gets the byte representation of the specified string. encodedChars = targetEncoding.GetBytes(str); // Prints the bytes. Console.WriteLine ("Byte representation of ‘{0}‘ in Code Page ‘{1}‘:", str, codePage); for (int i = 0; i < encodedChars.Length; i++) Console.WriteLine("Byte {0}: {1}", i, encodedChars[i]); } }
注意 |
---|
如果您在控制台应用程序中执行此代码,则指定的 Unicode 文本元素可能会显示不正确,因为控制台环境中对 Unicode 字符的支持会因所运行的 Windows 操作系统的版本而异。 |
在 ASP.NET 应用程序中可以使用这些方法来确定用于响应字符的编码。将 HttpResponse.ContentEncoding 属性的值设置为由适当的方法返回的值。下面的代码示例阐释了如何设置 HttpResponse.ContentEncoding。
// Explicitly sets the encoding to UTF-8. Response.ContentEncoding = Encoding.UTF8; // Sets ContentEncoding using the name of an encoding. Response.ContentEncoding = Encoding.GetEncoding(name); // Sets ContentEncoding using a code page number. Response.ContentEncoding = Encoding.GetEncoding(codepageNumber);
对于大多数 ASP.NET 应用程序,应使 HttpResponse.ContentEncoding 属性与 HttpRequest.ContentEncoding 属性相匹配,以便在编码中显示客户端期望的文本。
有关在 ASP.NET 中使用编码的更多信息,请参见常见任务快速入门中的“多种编码示例”和 ASP.NET
快速入门中的“设置区域性和编码示例”。