Unicode中阿拉伯字符的处理

5

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字符或字节来表示从左到右或其他什么东西?

2个回答

4

书写方向是每个Unicode字符的属性。Unicode对于每个码点(无论它是数字、数学符号,还是字母,大小写,方向性,所在的码块(间接定义了脚本)等)都包含一组复杂的属性。

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

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


2
这里有一个滑稽的方式来解释它。在Unicode中,RLM字符被编码为U+200F RIGHT-TO-LEFT MARK(HTML ‏ · ‏)。在UTF-8中,它是E2 80 8F。使用规定在Unicode双向算法中。LRM被编码为U+200E LEFT-TO-RIGHT MARK。双向算法在这里描述。具体来说,ALM U+061C ARABIC LETTER MARK是从右到左零宽度阿拉伯字符。参考链接:https://www.explainxkcd.com/wiki/index.php/1137:_RTLhttps://en.wikipedia.org/wiki/Right-to-left_markhttp://unicode.org/reports/tr9/

3
请注意,大多数情况下您 不应该 使用显式的方向控制。 - o11c

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接