将纯文本转换为其对应的Unicode值?

时间:2019-04-24 00:04:10

标签: c# unicode

我正在编写一个程序,要求我将Unicode文本转换为其相应的Unicode值。就像将字母“ a”转换为ASCII表中的数字(十进制为97)时一样。只有我想知道是否可以用Unicode完成。

谢谢。

2 个答案:

答案 0 :(得分:1)

.NET在您所要求的意义上没有用于迭代字母或字符代码的内置方法,因为它们位于.NET使用的字符编码(UTF-16)和字形(“用户-感知字符”)。

UTF-16以一个或两个代码单位(.NET的Char,在C#中别名为char)对每个Unicode代码点进行编码。 String(在C#中别名为string)是UTF-16代码单元的计数序列。

Char结构确实具有一些处理代码点的方法(如Int32)和一些笨拙的方法可以帮助迭代代码点。注意:代码点通常使用U +前缀和4或5个十六进制数字编写。

StringInfo类具有一些迭代字素(也称为“文本元素”)的方法。

但是,由于您询问有关Unicode字符代码(“代码点”)的问题,因此UnicodeInformation NuGet包可能是最好的选择。

使用它,您还可以获得Unicode.org发布的每个代码点的描述。他们的网站上有很多信息,包括codepoints的完整列表。

var s = "Put your  repair hobby on your résumé."; 
//  takes two UTF-16 code units. 
// Second é is two codepoints: "e\u0301", base and combining codepoints

var e = StringInfo.GetTextElementEnumerator(s);
while (e.MoveNext())
{
    var grapheme = (String)e.Current;
    Console.WriteLine(grapheme);

    foreach (var codepoint in grapheme.AsCodePointEnumerable())
    {
        var info = UnicodeInfo.GetCharInfo(codepoint);
        Console.WriteLine($"    U+{codepoint:X04} {info.Name} {info.Category}");
    }
}

另外,如果您不知道,在许多环境中,UTF-16(或其前向兼容的前驱UCS-2)一直是本机字符编码,已经使用了25年:VB4 / 5/6 / A / Script, Java,JavaScript,Windows API,NTFS,SQL NCHAR和NVARCAR,……。

答案 1 :(得分:0)

尝试一下:

string text = "€ a+…”";
foreach (char c in text)
{
    Console.WriteLine("{0} U+{1:x4} {2}", c, (int)c, (int)c);
}

对于显示的字符串中的每个字符:

  • 人物
  • 这是十六进制的Unicode字符代码
  • 这是unicode字符代码编号