Я пытаюсь написать в текстовом файле предложения, содержащие арабский и английский, но проблема в том, что оба языка имеют направление RTL и LTR, поэтому выходной текстовый файл не сохраняет порядок слов, а некоторые слова идут друг перед другом, что неверно , проблема исправлена, когда я меняю направление текста из блокнота или любого текстового редактора, есть ли способ исправить это с помощью java?
написать текстовый файл, смесь арабского и английского языков
Ответы (3)
Как я объяснил в своем комментарии к вашему предыдущему вопросу, текстовые файлы Unicode хранят символы в логическом порядке. Существует документированный алгоритм обработки двунаправленного текста и управляющих символов, которые можно вставить в текстовый поток, чтобы дать подсказки средству визуализации, например, где поставить знаки препинания, когда у вас есть арабская цитата в середине предложения на английском языке.
Но в конечном итоге выбор «преобладающего» направления текста на верхнем уровне является делом для компонента, отображающего текст, а не для чего-то, что сам текст может контролировать - средство визуализации имеет чтобы решить, имеет ли он дело с абзацем в основном на английском языке, содержащим некоторые фрагменты арабского языка, или наоборот.
Например, предположим, что у меня есть файл, содержащий следующую логическую последовательность символов (в соответствии с соглашениями в спецификации алгоритма двунаправленного текста, я использую строчные буквы для символов с письмом слева направо, таких как английский, и ВЕРХНИЙ регистр для символов с письмом справа налево, например Арабский):
abc def GHI! JKL mno? PQR
Средство просмотра, настроенное на обработку текста как преимущественно LTR, отобразит это как
abc def LKJ !IHG mno? RQP
тогда как средство просмотра, настроенное на обработку его как преимущественно RTL, будет отображать точно такой же текст как
RQP ?mno LKJ !IHG abc def
(при отсутствии управляющих символов наоборот, пунктуация, которая находится на границе между сегментом LTR и RTL, будет прикреплена к тому, который соответствует общему направлению абзаца)
<body dir="RTL">
в HTML.
- person Ian Roberts; 13.07.2014
Я думаю, вы можете просто установить кодировку в 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());
}
Если вы работаете в Eclipse, щелкните правой кнопкой мыши программу, «Запуск от имени», «Выполнить конфигурацию», «Обычный», «Кодировка», «Наследование по умолчанию UTF-8», просто используйте обычное средство чтения и записи файлов без указания UTF-8 в ваш код.