雙向文稿
雙向文本(英語:)用於某些文字上,特別是如阿拉伯語(包含其變體波斯体)和希伯來語等文字是由右至左書寫,即從右手邊書寫而結束於左手邊。這不同於世界上的其它許多語言是由左至右書寫的。當在同一段落混合使用這兩種文字且其各自使用自己的書寫方向時,這種文稿被稱為雙向文稿。如果使用多層的引用時,問題將會變得更複雜。
許多電腦程式無法正確地處理雙向文稿。譬如,這個希伯來語的名字 Sarah (שרה),其拼法應為從右至左的:shin(ש)、resh(ר)、heh(ה)。一些瀏覽器則會以相反的方式來顯示希伯來語文句。
有一些書寫系統則可以使用任一種方向來書寫。如在埃及語的聖書體中,會有一個符號含有"頭"(用來標示一行開始的方向)和"尾"(用來標示一行結束的方向)。漢字也可以用於任一方向,特別是用於招牌時(但是個別字符的方向則不會改變)。
另一種稱作牛耕式轉行書寫法的文字,則是用於一些古希臘語碑文、圖瓦雷克、古匈牙利文稿(Hungarian runes)中。這種書寫方法在寫下一行時,會改變書寫方向,並且常會反轉個別的字符。
雙向文稿支援則是指電腦系統可以正確處理及顯示雙向文稿的能力。其行話則常用BiDi或bidi。
統一碼
早期的電腦只設計成支援一種書寫方向,傳統上是只支援源於拉丁字母的由左至右方向。增加一個字符集和字符編碼則不過是多支援一種由左至右的語言,但是無法支援由右至左的文稿,如阿拉伯語和希伯來語,也無法混合使用兩者。單純地把由左至右改為由右至左是可行的,但是這犧牲了處理左至右文稿的能力。若有雙向文稿支援,則它可以在同一頁混合使用兩種文字而不用理會其書寫方向。
特別地,統一碼準則提供了完整的雙向文稿支援,清楚描述如何編碼及顯示混合左至右及右至左的文句。
在統一碼中,所有非標點符號字符都以書寫順序儲存。這意味著,字符書寫方向的資訊是儲存在字符裡的。如此的話,這種字符稱之為強字符。標點符號可以出現在左至右和右至左的語言裡。因為它們沒有包含方向上的資訊,所以被稱為弱字符。而弱字符要放置於文稿中的方式則是由軟體自行決定的。然而,即使依照此雙向演算的規則來掃過、辨識強字符,同時指定弱字符的方向,(在混合方向的文字中)有時仍會導致顯示上的錯誤。
在兩個具有一樣方向的強字符中的弱字符會得到相同的方向。如果一個弱字符處於有著不同方向的強字符中,則會得到主文的書寫方向(在左至右文件中,會變成左至右;在右至左文件中,則會變成右至左)。如果一個弱字符跟著另一個弱字符,這個演算法會尋找第一個相鄰的強字符。有時,這會導致非預期的顯示錯誤。要校正或預防這些錯誤,用户可以使用假強字符。這類的統一碼控制字符被稱作“標記”。在文件中插入標記(左至右符號U+200E用於左至右或右至左符號U+200F用於右至左),會使得被包圍其中的字符得到同於標記的書寫方向。
譬如,在阿拉伯語文章中,要想正確顯示用於一個英文名字的品牌的商標符號(U+2122 ™ TRADE MARK),如果商標符號後並沒有接著左向右的文句,用户須要在商標符號後加上一個左至右的標記。這是因為如果不加上左至右的標記的話,™這個弱符號就會變介於一個左至右的強字符和一個右至左的強字符之間。於是,在右至左的文檔中,它會被認為是右至左,從而以不正確的順序來顯示。
參考文獻
外部連結
- (英文)Unicode Standards Annex #9 (页面存档备份,存于) 雙向文稿演算法
- (英文)W3C 對於編寫雙向網頁文稿的指引 (页面存档备份,存于) -包含範例和不錯的擴充性。
- (英文)GNU FriBidi (页面存档备份,存于) 一個統一碼雙向文稿演算法的自由實作
- ICU (页面存档备份,存于) International Components for Unicode contains an implementation of the bidirectional algorithm — along with other internationalization services
- UCData: "Pretty Good Bidi Algorithm Library" A small and fast bidirectional reordering algorithm that works pretty good, but not necessarily compliant to the Unicode algorithm
- (英文)桌面軟體上的雙向文稿 自由軟體中支援雙方文稿的工作小組。包含一些有關在計算機系統中雙向文稿的鏈結。
- (英文)另一個關於雙向文稿的維基
- (英文)雙向文稿-範例和實作建議 (页面存档备份,存于)
- .Net (英文)雙向文稿實件