Java 将Unicode(UTF-8)文本写入文件时出现意外结果

Java 将Unicode(UTF-8)文本写入文件时出现意外结果,java,Java,我在用java将Unicode(UTF-8)文本写入文件时遇到问题。 我想用其他语言(波斯语)将一些文本写入java文件,但在运行我的应用程序后,我收到了意外的结果 File file = new File(outputFileName); FileOutputStream f = new FileOutputStream(outputFileName); String encoding = "UTF-8"; OutputStreamWriter osw = new OutputStre

我在用java将Unicode(UTF-8)文本写入文件时遇到问题。 我想用其他语言(波斯语)将一些文本写入java文件,但在运行我的应用程序后,我收到了意外的结果

 File file = new File(outputFileName);
 FileOutputStream f = new FileOutputStream(outputFileName);
 String encoding = "UTF-8";
 OutputStreamWriter osw = new OutputStreamWriter(f,encoding);
 BufferedWriter bw = new BufferedWriter(osw);

 StringBuilder row = new StringBuilder();
 row.append("Some text in English language");
 // in below code it should be  4 space before علی
 row.append("    علی");  
 // in below code it should be 6 space before علی یاری 
 row.append("      علی یاری");
 bw.write(row.toString());
 bw.flush(); bw.close();


如何解决此问题?

输出是根据的预期值。整个波斯语文本从右向左呈现。如果要将单个单词从左到右排列,则需要在两个波斯语单词之间插入一个强从左到右的字符。这里有一个特殊的字符:从左到右的标记(U+200e)。对代码的此修改应产生正确的输出:

row.append("Some text in English language");
row.append("    علی");
row.append('\u200e');
row.append("      علی یاری");

波斯语不是像程序那样从右向左写吗?右边第一个单词,左边第二个单词?这是一个关于这个问题的更简单的代码示例:
System.out.print(“[”;System.out.print(“);System.out.print(“);System.out.print(”);System.out.print(“])-输出是
[لی]
@joachim isaksson输出是从左到右的,我想在英文文本之后写一些波斯语文本实际上,我认为这与文本中隐藏的从右到左的覆盖有关。@Makoto-文本中有RLO吗?我在OP的资料里没看到。