在unicode中处理阿拉伯字符

问题描述:

unicode何时知道何时从右向左或从左向右读取。在unicode中处理阿拉伯字符

无论是在word中还是在python中。

例如,

هذا هو الملعون جيد رجل الصباح! 

如果你点击退格键,这将是自右向左读。

我打印的Unicode字节表示这是

u'\u0647\u0630\u0627 \u0647\u0648 \u0627\u0644\u0645\u0644\u0639\u0648\u0646 \u062c\u064a\u062f \u0631\u062c\u0644 \u0627\u0644\u0635\u0628\u0627\u062d!' 

,但我没有看到任何标志着从左到右或从右到左。

普通字符串一样,

Hi how are you, it works from left to right. 

不应该会有一个Unicode字符或字节来表示左到右的东西?

有,这里是一个喜剧的方式来解释它。 https://www.explainxkcd.com/wiki/index.php/1137:_RTL

在Unicode中,所述R​​LM字符在U + 200F右至左符号 (HTML ‏ · ‏).编码。在UTF-8是E2 80 8F。 Unicode双向算法中的用法规定为 。 LRM被编码U + 200E左至右符号

https://en.wikipedia.org/wiki/Right-to-left_mark

双向算法这里描述。 http://unicode.org/reports/tr9/

具体地说 ALM U + 061C阿拉伯语LETTER MARK从右到左零宽度阿拉伯字符

+3

请注意,大多数情况下,您*不应该使用明确的方向控制。 – o11c

的书写方向是每个Unicode字符的属性。 Unicode包含每个代码点的一组复杂属性(无论是例如数字,数学符号,是否是字母,它的大小写,方向性,代码块在哪个 - 它间接定义了脚本等)。

例如,见http://www.fileformat.info/info/unicode/char/0647/index.htm(这是你的榜样的第一个字符),其中包括比迪(双向)财产[AL] - 这个编码“从右到左阿拉伯语”作为这个雕文的书写方向。

有一些Unicode字符显式设置文本的方向,但这些字符通常不是必需的或有用的。字体渲染器应该从它的Unicode属性中知道它所呈现的每个字符,它需要哪个方向(尽管从其他传统编码转换的文本可能仍包含显式方向指示器代码)。