2010-08-26 163 views
5

假设我有一个随机中文字符,玩。我想将它转换为Unicode,这将是U + 73A9。我怎么能在C#中做到这一点?将汉字转换为Unicode

+3

这个汉字来自哪里?键盘输入?从磁盘上的文件?该文件中使用了哪些代码页或编码? (简体中文,繁体中文或??)你需要知道在输入字节上使用什么编码,然后才能有意义地将其转换为其他编码。 – dthorpe 2010-08-26 02:05:34

+0

键盘输入,使用UTF(16我猜,应该有大部分字符),简体或传统。 – Mass 2010-08-26 02:38:17

回答

5

采取myChar作为一个char引用您的特殊字符...

Console.WriteLine("{0} U+{1:x4} {2}", myChar, (int)myChar, (int)myChar); 

上面我们输出其次是Unicode代码点字符本身,然后整数值。

减少格式字符串和参数,只输出“U + ......”的代码...

Console.WriteLine("U+{0:x4}", (int)myChar); 
+0

谢谢,这真棒!你能向我解释代码吗?我知道你只是写U +,但是什么是'{0:x4}'?我知道其中一个是一个说明符,那么':x4'是什么? – Mass 2010-08-26 04:00:46

+2

'x4'将其输出为十六进制(x),4位零填充在左侧。 – Chris 2010-08-26 04:16:31

+0

谢谢! (15个字符...) – Mass 2010-08-26 04:30:14

2

该characater玩是在Unicode。

如果你在C#中使用它作为玩,那么它现在是UTF-16,这是Unicode编码形式之一。

如果是从别的地方获得它,你需要:

  1. 查找编码它是
  2. 获取字节(由流是不错的包裹)。
  3. 获取写入适当的编码器。
  4. 使用编码器来获取字符串(用文本阅读器包装漂亮的流更好)。

第三步可能是简单的(哦,我只是用一个!)或硬(织补,必须把它写我自己!)或介于两者之间(嘿,任何人写的其中之一已?)

+0

我的意思是我想把字符变成U + 73A9 – Mass 2010-08-26 02:40:06

+0

char c ='\ u73a9'; – 2010-08-26 02:47:43

+0

@格雷格感谢,但我想要相反。我想要的东西像玩 - > \ u73a9 – Mass 2010-08-26 02:50:32

0

的时间长一点例如,以下乔恩汉娜的回答模式:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace UnicodeDecodeConsoleApplication 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      char c = '\u73a9'; 
      char[] chars = {c}; 
      Encoding encoding = Encoding.BigEndianUnicode; 
      byte[] decodeds = encoding.GetBytes(chars); 
      StringBuilder stringBuilder = new StringBuilder("U+"); 
      foreach (byte decoded in decodeds) 
      { 
       stringBuilder.Append(decoded.ToString("x2")); 
      } 
      Console.WriteLine(stringBuilder); 
      Console.ReadLine(); 
     } 
    } 
} 

- jeroen