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

时间:2014-06-01 07:28:54

标签: java

使用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();

enter image description here

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:-1)

输出是根据Unicode bidirectional algorithm预期的结果。整个波斯语文本从右向左呈现。如果您希望从左到右排列单个单词,则需要在两个波斯语单词之间插入一个强烈从左到右的字符。对此有一个特殊的特征:LEFT TO RIGHT MARK(U + 200e)。对代码的这种修改应该产生正确的输出:

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