将Unicode字符数组转换为ASCII字符数组

时间:2011-06-21 17:43:10

标签: c# arrays unicode ascii

所以我对此的理解是Unicode字符长度为两个字节,因此第一个字节应该是ASCII令牌,第二个字节应该是另一个ASCII令牌。我有一个Unicode字符数组,我想将它转换为ASCII字符数组,最终将是原始字符的两倍。

3 个答案:

答案 0 :(得分:2)

乔尔在这里说得最好:

http://www.joelonsoftware.com/articles/Unicode.html

我强烈建议您阅读。这是我见过的关于Unicode和字符集的最佳入门。

答案 1 :(得分:1)

听起来您只想将Unicode字节拆分为两个ASCII字符。 字符串将不相关,字符将完全不匹配。

Unicode字符不是由两个ASCII令牌组成的。

Unicode是ASCII的独特编码。

但如果您只想要字节数据:Encoding.Unicode.GetBytes(data);就是您所需要的。

答案 2 :(得分:0)

您可以使用Encoding.Convert方法。有了它,您可以指定您希望转换字符串(或字符数组)的编码。

正如他们的文档中所见,这是一个例子:

使用System; 使用System.Text;

namespace ConvertExample
{
   class ConvertExampleClass
   {
      static void Main()
      {
         string unicodeString = "This string contains the unicode character Pi(\u03a0)";

         // Create two different encodings.
         Encoding ascii = Encoding.ASCII;
         Encoding unicode = Encoding.Unicode;

         // Convert the string into a byte[].
         byte[] unicodeBytes = unicode.GetBytes(unicodeString);

         // Perform the conversion from one encoding to the other.
         byte[] asciiBytes = Encoding.Convert(unicode, ascii, unicodeBytes);

         // Convert the new byte[] into a char[] and then into a string.
         // This is a slightly different approach to converting to illustrate
         // the use of GetCharCount/GetChars.
         char[] asciiChars = new char[ascii.GetCharCount(asciiBytes, 0, asciiBytes.Length)];
         ascii.GetChars(asciiBytes, 0, asciiBytes.Length, asciiChars, 0);
         string asciiString = new string(asciiChars);

         // Display the strings created before and after the conversion.
         Console.WriteLine("Original string: {0}", unicodeString);
         Console.WriteLine("Ascii converted string: {0}", asciiString);
      }
   }
}