我正在编写一个程序,要求我将Unicode文本转换为其相应的Unicode值。就像将字母“ a”转换为ASCII表中的数字(十进制为97)时一样。只有我想知道是否可以用Unicode完成。
谢谢。
答案 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);
}
对于显示的字符串中的每个字符: