我正在尝试用包含阿拉伯语和英语的文本文件句子写,但是这两种语言都有方向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段之间边界的标点符号将附加到与整个段落方向匹配的标点符号)
答案 1 :(得分: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());
}
答案 2 :(得分:0)
如果您在Eclipse中运行,请右键单击您的程序,“运行方式”,“运行配置”,“通用”,“编码”,“默认继承UTF-8”,只需使用常规文件读取器和写入器,而无需指定UTF代码中为-8。