如何在 .NET C# 中解析阿拉伯文本字符串的每个字母?

How do I parse each letter of an Arabic text string in .NET C#?

为什么当我在第 13th 位置遍历此 .NET C# 字符串 Arabic text: ٻڠڣڟگگښڏ 的每个字符时,我得到了错误的字母? 'ٻ' 而不是 'ˊ'。

我该如何解决?

阿拉伯语是从右到左书写的。箭头指向偏移量 20 处的字符。

你指向最后一个

 0: U+0041 LATIN CAPITAL LETTER A
 1: U+0072 LATIN SMALL LETTER R
 2: U+0061 LATIN SMALL LETTER A
 3: U+0062 LATIN SMALL LETTER B
 4: U+0069 LATIN SMALL LETTER I
 5: U+0063 LATIN SMALL LETTER C
 6: U+0020 SPACE
 7: U+0074 LATIN SMALL LETTER T
 8: U+0065 LATIN SMALL LETTER E
 9: U+0078 LATIN SMALL LETTER X
10: U+0074 LATIN SMALL LETTER T
11: U+003A COLON
12: U+0020 SPACE
13: U+067B ARABIC LETTER BEEH
14: U+06A0 ARABIC LETTER AIN WITH THREE DOTS ABOVE
15: U+06A3 ARABIC LETTER FEH WITH DOT BELOW
16: U+069F ARABIC LETTER TAH WITH THREE DOTS ABOVE
17: U+06AF ARABIC LETTER GAF
18: U+06AF ARABIC LETTER GAF
19: U+069A ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE
20: U+068F ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS

而且这还没有涉及字素(视觉元素)可以由多个 Unicode 代码点组成的事实,并且 C# 使用代理对,因此使用多个 char 值来表示一些 Unicode 代码点。

例如,存在一个脚本,其中存在以下字素:1

  • 字素由 Unicode 代码点 U+11A0B 后跟 U+11A33 组成。
  • C# 将 U+11A0B 编码为字符 0xD806,后跟 0xDE0B。
  • C# 将 U+11A33 编码为字符 0xD806,后跟 0xDE33。

因此字素将由以下四个 char 值序列表示!

  1. 0xD806
  2. 0xDE0B
  3. 0xD806
  4. 0xDE33

不,它不仅仅适用于古老的语言。 ""被很多人日常使用。

  • 字素由 Unicode 代码点 U+1F600 形成。
  • C# 将 U+1F600 编码为字符 0xD83D,后跟 0xDE00。

  1. 我不熟悉所讨论的脚本,所以我不知道这个角色在实践中是否有意义。但如果这个没有,其他类似的字符确实有意义。