2014-07-13 106 views
1

我正在嘗試在包含阿拉伯語和英語的文本文件中編寫句子,但兩種語言都有RTL和LTR方向的問題,因此輸出文本文件不保存單詞和一些單詞之間出現錯誤,這個問題修正了當我從記事本或任何文本編輯器改變文本方向時,是否有任何方法可以用java解決這個問題?在阿拉伯語和英語之間寫入文本文件

+0

你解決了嗎? –

回答

1

正如我在你對上一個問題的評論中解釋的那樣,Unicode文本文件按邏輯順序存儲字符。有a documented algorithm如何處理雙向文本,並控制可以插入到文本流中的字符,爲渲染器提供有關(例如)在英語句子中間有阿拉伯語引號時附加標點的提示。

但是最終選擇文本作爲整體的頂級「主導」方向是顯示文本的組件的問題,而不是文本本身可以控制的內容 - 渲染器必須決定它是否處理包含一些阿拉伯語或反之亦然的大部分英文段落。

例如,假設我有一個文件,其中包含以下邏輯字符序列(符合bidi算法規範中的約定,對於從右到左的字符(例如英語和大寫字母)左側的字符,如阿拉伯):

abc def GHI! JKL mno? PQR 

設置把文本作爲主要LTR會使此作爲

abc def LKJ !IHG mno? RQP 

而觀看者配置成把它的觀看者作爲主要RTL會使完全相同的文本作爲

         RQP ?mno LKJ !IHG abc def 

(在沒有控制字符與此相反的是在於在一個LTR和RTL段之間的邊界處的標點符號將附加到整個段落方向相匹配的)

+0

感謝lan的澄清,但我仍然無法解決我的問題我試圖輸出文本文件爲UTF-8和ansi修復但問題仍然存在,我使用的編輯器是記事本或記事本++ –

+0

@MahmoudIsmail我'我已經添加了一個可能會更清晰一些的例子。 –

+0

對於純文本,我認爲文本本身並沒有辦法告訴觀察者使用哪個方向。更高級別的格式具有可以使用的「帶外」信號,例如, ''在HTML中。 –

0

我認爲你可以將字符集設置爲UTF-8,並且你會得到正確的單詞順序。 看看這個

Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("Output.txt"), "UTF-8")); 
try { 
     out.write("1."); 
     out.write("English "); 
     out.write("2."); 
     out.write("عربي "); 
     out.write("3."); 
     out.write("Hey "); 
     out.write("4."); 
     out.write("السلام "); 
    } finally { 
     out.close(); 
    } 

File f = new File("Output.txt"); 
Scanner fileprint = new Scanner(f); 

while(fileprint.hasNext()){ 
    System.out.println(fileprint.next()); 
} 
+0

感謝哈馬德爲你答覆,但我的問題,你可以看到你生成的文本文件中,你叫output.txt,如果你打開它,你會發現單詞順序改變,一些英文單詞轉移,並確切的問題,我面臨。 –

相關問題