阿拉伯字符串:获取实际字形(上下文整形)

时间:2014-02-10 11:33:18

标签: .net string arabic

我有一个阿拉伯语字符串。例如:راماتراحيل

在阿拉伯语中,根据字母位置,相同的字母具有不同的字形。 因此,如果是孤立的或初始的,则字母Lam是ل,如果它是内侧的或最终的,则是ل。

当我在char数组中转换原始字符串(.NET)时,所有字符都返回为Isolated。

是否可以拥有实际的字形?

我必须“翻译”阿拉伯语字符并将其发送到设备。所以ل有代码128(例如),而ل有代码129。 翻译表是自定义的。

如何获取char并不重要,在所有情况下它们都以Isolated形式返回:

Dim a As String = "رامات راحيل"
Dim ar As Char() = a.ToCharArray

For Each c As Char In ar
    Console.WriteLine(c)
Next

For i As Integer = 0 To a.Length - 1
    Console.WriteLine(a.Substring(i, 1))
Next

For i As Integer = 0 To a.Length - 1
    Console.WriteLine(a.Chars(i))
Next

我的理解是代码是相同的,但形状是不同的。 见标准杆。上下文整形http://msdn.microsoft.com/en-us/goglobal/bb688137.aspx

4 个答案:

答案 0 :(得分:0)

转换为char数组时,您会丢失有关位置的信息。明显的所有字符都是隔离的,因此可以在任何地方使用。有趣的是,对于写作而言,它在这里有所作为(每天学习新东西)。

您有两种选择:

  • 为每个char保存另一个数组,如果char是初始的,单独的,内侧的或最终的,则保存。
  • 自己进行数组转换。由于您可以在网站上输入两个不同的UTF-8字符,因此必须有一个单独的UTF-8字符。因此,请查看您的字符串并构建您自己的Char数组创建者,他们将了解何时采用其中一个。

答案 1 :(得分:0)

实际上是来自GDI的GetCharacterPlacement,来自Uniscribe的ScriptShape或来自DirectWrite的IDWriteTextAnalyzer的GetGlyphs将执行此操作。或者,因为这些不仅是字形,而且实际上是阿拉伯语演示范围内的Unicode标准定义的替代字符,您可以简单地制作自己的翻译表,但在确定初始,最终,内侧或隔离时,请注意忽略组合变音符号。 / p>

答案 2 :(得分:0)

这个问题有一个完整的解决方案。它由一个字形定义文件和一个cpp实用程序函数组成,用于使用字符代码

获取实际字形

请查找更多详细信息并下载文件from here

答案 3 :(得分:-1)

你应该考虑