阿拉伯字符根据字符串中的位置有不同的Unicode代码点吗?

时间:2015-11-15 09:23:31

标签: unicode arabic

阿拉伯字符是否根据字符串中的位置具有不同的Unicode代码点,还是可视化解决方案?

这是同一个单词,3次,带有空格而没有 看起来它的Unicode值相同。

عربى
عربى
عربى

我需要做的是扫描阿拉伯字符串列表,并获取它们的值。使用这些值,我将选择要显示的特定字母的图标。 但是,如果它是相同的代码点,意思是我需要在代码中创建我自己的逻辑,我想避免。

2 个答案:

答案 0 :(得分:12)

不同的形状有不同的unicode,例如字母Ê\u062A包含不同形状的所有代码:\uFE95Ê,\uFE97Ê,\uFE98Ê,{{ 1}}Ê。

虽然大多数情况下阿拉伯语文本与主要的未定形unicode保持一致。形状形式仅用于渲染。因此,如果你通过一个程序检查你的文本,你会发现它大多没有形状。

如果您想要塑造所有字母,您可以使用像[{3}}这样的整形器库:

\uFE96

如果您希望所有字母都不成形,请使用向下形状贴图将字母转换为其主要形状。

这是一张整形地图:

   import arabic_reshaper
   reshaped_text = arabic_reshaper.reshape(u'اللغة العربية رائعة')

答案 1 :(得分:4)

阿拉伯语在Unicode中为其保留了5个字符块:

  • U + 0600 .. U + 06FF阿拉伯语
  • U + 0750 .. U + 077F阿拉伯文补编
  • U + 08A0 .. U + 08FF Arabic Extended A
  • U + FB50 .. U + FDF​​F阿拉伯语演示表格A
  • U + FE70 .. U + FEFF阿拉伯语演示表格B

问题中的示例文本全部用4个代码点编码:

  • UTF-8 0xD8 0xB9 = U + 0639 = ARABIC LETTER AIN
  • UTF-8 0xD8 0xB1 = U + 0631 = ARABIC LETTER REH
  • UTF-8 0xD8 0xA8 = U + 0628 = ARABIC LETTER BEH
  • UTF-8 0xD9 0x89 = U + 0649 = ARABIC LETTER ALEF MAKSURA

此外,还有空格和一些出现:

  • UTF-8 0xE2 0x80 0x8E = U + 200E = LEFT-TO-RIGHT MARK(LRM)

尽管使用相同的Unicode代码点来存储数据,但阿拉伯字母的显示方式不同,这表明您需要调整显示的字形相对于其他字符的位置(开头,中间,结尾)单词或独立)。您可以阅读第9章(Middle East–I)以了解有关阿拉伯文本处理的更多信息。