写阿拉伯语和英语之间的文本文件混合

我正在尝试用包含阿拉伯语和英语的文本文件句子写,但是这两种语言都有方向RTL和LTR的问题所以输出文本文件不保存单词的顺序而某些单词在彼此之前出现错误,当我从记事本或任何文本编辑器更改文本方向时修复的问题是否有任何方法可以使用java修复此问题?

正如我在您对上一个问题的评论中所解释的那样,Unicode文本文件按逻辑顺序存储字符。 有一个文档化的算法 ,用于处理双向文本,控制可以插入到文本流中的字符,以便为渲染器提供有关例如在英语句子中间有阿拉伯语引号时附加标点符号的位置的提示。 。

但最终选择整个文本的顶级“主导”方向是显示文本的组件而不是文本本身可以控制的内容 – 渲染器必须决定它是否正在处理大多数英文段落包含一些阿拉伯语,反之亦然。

例如,假设我有一个包含以下逻辑字符序列的文件(符合bidi算法规范中的约定,我使用小写字母表示从左到右的字符,例如英语和大写字母表示从右到左的字符,例如阿拉伯):

abc def GHI! JKL mno? PQR 

配置为将文本视为主要为LTR的查看器将其呈现为

 abc def LKJ !IHG mno? RQP 

而配置为将其视为主要是RTL的查看器将呈现完全相同的文本

  RQP ?mno LKJ !IHG abc def 

(在没有控制字符的情况下,位于LTR和RTL段之间边界的标点符号将附加到与整个段落方向匹配的标点符号)

我认为你可以将字符集设置为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()); }