2014-07-13 2 views
1

Я пытаюсь написать текстовые предложения, содержащие арабский и английский языки, но проблема, что оба языка имеют направление RTL и LTR, поэтому выходной текстовый файл не сохраняет порядок слова и некоторые слова приходят друг перед другом, что неправильно, проблема исправлена, когда я изменяю направление текста из блокнота или любого текстового редактора, есть ли способ исправить это с помощью java?написать текстовое соединение между арабским и английским

+0

Вы решили это? –

ответ

1

Как я объяснил в своем комментарии к предыдущему вопросу, текстовые файлы Unicode сохраняют символы в логическом порядке. Существует a documented algorithm для обработки двунаправленного текста и управления символами, которые вы можете вставить в текстовый поток, чтобы дать подсказки рендереру, например, где можно привязать знаки препинания, когда у вас есть арабская цитата в середине английского предложения.

Но в конечном счете, выбор верхнего уровня «преобладающее» направление текста в целом является вопросом для компонента, который отображает текст, а не то, что сам текст может контролировать - в визуализатора должен решить, имеет ли он дело в основном английском абзаце, содержащем некоторые фрагменты арабского языка или наоборот.

Например, предположим, что у меня есть файл, содержащий следующую логическую последовательность символов (в соответствии с соглашениями в спецификации алгоритма bidi. Я использую строчные буквы для символов слева направо, такие как английский и UPPERCASE для правосторонних символов, Осталось символов, таких как арабский):

abc def GHI! JKL mno? PQR 

зритель, выполненный с возможностью обрабатывать текст в основном ДКП сделает это как

abc def LKJ !IHG mno? RQP 

, тогда как зритель настроен рассматривать его как преимущественно РТЛ бы оказать точно такой же текст в

         RQP ?mno LKJ !IHG abc def 

(при отсутствии управляющих символов противного пунктуация, которая лежит на границе между LTR и сегментом RTL будет прикрепляются к той, которая соответствует общей направленности пункта)

+0

спасибо lan для вашего уточнения, но я все еще не могу решить свою проблему. Я попробовал выходной текстовый файл, чтобы быть UTF-8 и ansi для исправления, но проблема все еще существует, редактор, который я использую, это блокнот или блокнот ++ –

+0

@MahmoudIsmail I ' я добавил пример, который может прояснить ситуацию немного больше. –

+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

спасибо hamad за ответ, но моя проблема, которую вы можете увидеть в сгенерированном текстовом файле, который вы назвали output.txt, если вы его откроете, вы обнаружите, что порядок слов изменился, а некоторые английские слова сдвинуты и что точная проблема, с которой я сталкиваюсь. –

Смежные вопросы