如何制作不分隔变音符号的 charArray?

Nam*_*s36 5 c# normalization diacritics hebrew unity-game-engine

我试图将希伯来语单词分成 C# 中的字母,但 ToCharArray() 将变音符号分开,就好像它们是单独的字母一样(但事实并非如此)。我可以选择将字母与变音符号保持完整,或者在最坏的情况下完全删除变音符号。

\n

示例: \xd7\x9b\xd6\xbc\xd6\xb6\xd7\x9c\xd6\xb6\xd7\x91 显示为 6 个不同的字母。

\n

Han*_*ing 5

StringInfo类了解基本字符和重音符号,并且可以处理此问题

\n
string s = "\xd7\x9b\xd6\xbc\xd6\xb6\xd7\x9c\xd6\xb6\xd7\x91";\nSystem.Globalization.TextElementEnumerator charEnum = System.Globalization.StringInfo.GetTextElementEnumerator(s);\nwhile (charEnum.MoveNext())\n{\n    Console.WriteLine(charEnum.GetTextElement());\n}\n
Run Code Online (Sandbox Code Playgroud)\n

将打印 3 行:

\n
\n

\xd7\x9b\xd6\xbc\xd6\xb6
\n\xd7\x9c\xd6\xb6
\n\xd7\x91

\n
\n


Mat*_*mas 3

C# 中的字符串存储为char. 也就是说:它们是UTF-16代码单元的数组。ToCharArray()只返回 UTF-16 数组。有时需要多个代码单元才能形成单个“符号”。

\n

会有char.GetUnicodeCategory(char)什么帮助吗?也许您可以将该数组拆分为OtherLetter其他东西(不熟悉希伯来语)?

\n
const string word = "\xd7\x9b\xd6\xbc\xd6\xb6\xd7\x9c\xd6\xb6\xd7\x91";\nConsole.WriteLine(word.Length);\nConsole.WriteLine(string.Join(" ", word.ToCharArray().Select(x => (int)x)));\nConsole.WriteLine(string.Join(" ", word.ToCharArray().Select(char.GetUnicodeCategory)));\n
Run Code Online (Sandbox Code Playgroud)\n

输出:

\n
6\n1499 1468 1462 1500 1462 1489\nOtherLetter NonSpacingMark NonSpacingMark OtherLetter NonSpacingMark OtherLetter\n
Run Code Online (Sandbox Code Playgroud)\n