处理unicode中的阿拉伯字符

时间:2016-04-03 04:55:40

标签: python unicode

unicode何时知道何时从右向左或从左向右阅读。

单词和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字符或字节从左到右表示什么?

2 个答案:

答案 0 :(得分:3)

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

例如,请参阅http://www.fileformat.info/info/unicode/char/0647/index.htm(这是您示例中的第一个字符),其中包含bidi(双向性)属性[AL] - 这会将“从右向左的阿拉伯语”编码为书写方向这个字形。

有Unicode字符明确设置文本的方向,但通常不需要或有用。对于它呈现的每个字符,字体渲染器应该已经知道它的Unicode属性,它需要哪个方向(尽管从其他遗留编码转换的文本可能仍然包含明确的方向指示符代码)。

答案 1 :(得分:1)

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

  

在Unicode中,RLM字符以U + 200F RIGHT-TO-LEFT MARK编码   (HTML ‏ · ‏).在UTF-8中,它是E2 80 8F。用法是规定的   在Unicode双向算法中。    LRM编码为U + 200E LEFT-TO-RIGHT MARK

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

此处描述了双向算法。 http://unicode.org/reports/tr9/

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