将中文字符转换为Unicode

5

假设我有一个随机的中文字符,玩。我想将其转换为 Unicode,该字符的 Unicode 编码是 U+73A9。在 C# 中我应该如何实现这一点?


3
这个汉字是从哪里来的?键盘输入?还是从磁盘文件中读取?那个文件使用的代码页或编码是什么?(简体中文,繁体中文还是其他?)在有意义地转换为其他编码之前,您需要知道输入字节使用的编码方式。 - dthorpe
键盘输入,使用UTF(我猜是16,因为它应该包含大部分字符),简体或繁体。 - Mass
3个回答

5

myChar视为引用您特殊字符的 char 类型...

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

以上代码输出的是字符本身,后跟Unicode编码点和整数值。

简化格式字符串和参数,仅输出“U+…”代码...

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

谢谢,这太棒了!不过你能给我解释一下代码吗?我知道你只是在写U+,但是{0:x4}是什么意思?我知道其中一个是某个说明符,那么:x4又是什么? - Mass
2
“x4” 将其输出为十六进制(x),左侧填充了 4 个零位。 - Chris

2

字符“玩”在Unicode中。

如果您在C#中使用“玩”,那么它目前在UTF-16中,这是Unicode编码形式之一。

如果您从其他地方获取它,则需要:

  1. 找到它所在的编码方式。
  2. 获取字节(使用流进行封装较好)。
  3. 获取或编写适当的编码器。
  4. 使用编码器获取字符串(使用文本读取器封装流更佳)。

第3步可能很简单(哦,我只需使用那个!),也可能很困难(该死,必须自己写!)或介于两者之间(嘿,有人已经写了这些东西吗?!)


我所指的是我想把这个字符转换成 U+73A9。 - Mass
@Greg- 谢谢,但我想要相反的方式。我想要像玩 -> \u73a9这样的东西。 - Mass

0
一个稍微长一点的例子,遵循Jon Hanna答案中的模式:
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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接