我试图写在文本文件中的句子,包含阿拉伯语和英语,但问题是,这两种语言有方向RTL和LTR,所以输出的文本文件不保存单词的顺序和一些单词来之前的对方是错误的,这个问题固定时,我改变文本方向从记事本或任何文本编辑器,有什么办法来解决这个使用java?
正如我在对你上一个问题的评论中所解释的,Unicode文本文件是按逻辑顺序存储字符的。有 成文法则 以及可以插入到文本流中的控制字符,以给渲染器提示,例如,当你在一个英文句子中间有一个阿拉伯语引号时,应该在哪里添加标点符号。
但最终,整个文本的顶层 "主导 "方向的选择是显示文本的组件的事情,而不是文本本身可以控制的事情------。渲染器 必须决定它处理的是一个包含一些阿拉伯语的英文段落,还是反之。
例如,假设我有一个包含以下逻辑字符序列的文件 (根据 bidi 算法规范中的约定,我对从左到右的字符如英语使用小写,对从右到左的字符如阿拉伯语使用大写)。
abc def GHI! JKL mno? PQR
如果查看器配置为将文本视为主要的LTR,则会将其呈现为: 1.
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());
}
如果在Eclipse中运行,右击你的程序,"运行为","运行配置","通用","编码","默认继承UTF-8",只用普通的File reader和writer,不用在代码中指定UTF-8。