.NET не имеет встроенного метода для итерации букв или кодов символов в том смысле, в котором вы спрашиваете, поскольку они находятся на среднем уровне между кодировкой символов, используемой .NET (UTF-16), и графемами ("пользователь").персонажи ").
UTF-16 кодирует каждую кодовую точку Unicode в одну или две кодовые единицы (.NET Char
с псевдонимом в C # как char
).A String
(с псевдонимом в C # как string
) - это подсчитанная последовательность кодовых единиц UTF-16.
Структура Char
имеет некоторые методы, которые работают с кодовыми точками (как Int32
), и некоторые неудобные, которые могут помочь перебирать кодовые точки.Примечание: кодовые точки обычно пишутся с префиксом U + и 4 или 5 шестнадцатеричными цифрами.
StringInfo
класс имеет несколько методов, которые выполняют итерации графем (так называемые «текстовые элементы»).
Но, поскольку вы спрашиваете о кодах символов Unicode («кодовые точки»), пакет NuGet UnicodeInformation может быть лучшим вариантом.
С его помощью вы также можете получить описание каждой кодовой точки, опубликованное Unicode.org .Их веб-сайт содержит много информации, включая полные списки кодовых точек .
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,….