2016-04-03 160 views
5

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字符或字節來表示左到右的東西?

回答

1

有,這裏是一個喜劇的方式來解釋它。 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

2

的書寫方向是每個Unicode字符的屬性。 Unicode包含每個代碼點的一組複雜屬性(無論是例如數字,數學符號,是否是字母,它的大小寫,方向性,代碼塊在哪個 - 它間接定義了腳本等)。

例如,見http://www.fileformat.info/info/unicode/char/0647/index.htm(這是你的榜樣的第一個字符),其中包括比迪(雙向)財產[AL] - 這個編碼「從右到左阿拉伯語」作爲這個雕文的書寫方向。

有一些Unicode字符顯式設置文本的方向,但這些字符通常不是必需的或有用的。字體渲染器應該從它的Unicode屬性中知道它所呈現的每個字符,它需要哪個方向(儘管從其他傳統編碼轉換的文本可能仍包含顯式方向指示器代碼)。