将Unicode字符的十六进制序列解码为字符串的最佳方法

5

我正在使用C# .Net

我想知道如何将Unicode格式的字符串(如"\u1D0EC",请注意它在"\uFFFF"上方)转换为其符号... " "

提前感谢!


Unicode的最大值不是只有FFFF吗?Unicode 1D0EC的含义是什么? - Aviad P.
我找到的最接近的解决方案是这个: https://dev59.com/tnI-5IYBdhLWcg3w6dC2但它只适用于下面的Unicode "\uFFFF"。 - Jack
你是指它的符号代表什么?在显示时,该符号会被映射到其视觉表示。你想要转换为UTF8吗?转换为特定编码?Joel Spolsky有一篇关于Unicode的好文章 - 它很令人困惑。 - Hamish Grubijan
Unicode 可以超过 FFFF。 - Jack
我不在意它是否以可视化形式呈现,只需要包含方块的字符串。 在fileformat.com上,他们有一个“浏览器测试页面”,您可以在其中看到匹配的方块。 - Jack
4个回答

7

该Unicode代码点已经编码为UTF32。.NET和Windows使用UTF16编码Unicode,您需要进行翻译。UTF16使用“代理对”来处理超过0xffff的代码点,这与UTF8采用的类似方法。第一组代码为0xd800..dbff,第二组代码为0xdc00..dfff。尝试使用以下示例代码查看其工作原理:

using System;
using System.Text;

class Program {
  static void Main(string[] args) {
    uint utf32 = uint.Parse("1D0EC", System.Globalization.NumberStyles.HexNumber);
    string s = Encoding.UTF32.GetString(BitConverter.GetBytes(utf32));
    foreach (char c in s.ToCharArray()) {
      Console.WriteLine("{0:X}", (uint)c);
    }
    Console.ReadLine();
  }
}

2

1

我最近在Codeplex上发布了我的FOSS Uncode Converter(http://unicode.codeplex.com)。

你可以将任何想要转换的内容转换为十六进制代码,也可以从十六进制代码中获取正确的字符,还有一个完整的信息字符数据库。

我使用这段代码。

public static char ConvertHexToUnicode(string hexCode)
    {
        if (hexCode != string.Empty)
            return ((char)int.Parse(hexCode, NumberStyles.AllowHexSpecifier));

        char empty = new char();
        return empty;
    }//end

您可以在http://unicode.codeplex.com/上查看完整的代码。


0

看起来你只是想在你的代码中使用它... 你可以使用转义码\Uxxxxxxxx将其作为字符串文字输入(请注意,这是一个大写的U,并且必须有8个数字)。 对于这个例子,它应该是:"\U0001D0EC"


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