编写文件时的java编码问题

时间:2014-02-20 16:41:33

标签: java file encoding

我正在创建一个非常简单的应用程序,它从一个文件读取一些输入并生成包含该信息的另一个文件。我在Windows 7上运行它并没有任何问题,但是当我在Mac OS上运行它时,特殊字符没有正确显示。

这是我的代码:

Writer writer = new BufferedWriter(
    new OutputStreamWriter(
        new FileOutputStream(destiny),"utf-8"));
writer.write(infoFromInputFile);
writer.close();

我用UTF-8编码声明我的FileOutputStream,当我检查创建的文件属性时,它说它是UTF-8,但是特殊字符,如¿,á,é,í,¡等。显示错误。

为什么会发生这种情况?

2 个答案:

答案 0 :(得分:0)

你是如何检查输出文件的?也许你打开它的编辑器,或者你用控制台(或控制台本身)将它转储到控制台的命令,错误地渲染了文件的内容? (也就是说,也许文件是正确的,你检查它的东西假设它不是UTF-8。)

或者,您确定使用正确的编码打开输入文件(可能使用Reader吗?)?

你需要检查一些事情:

  • 首先,我建议您在关闭之前在Writer上调用flush()

  • 原始文件(输入文件)的实际编码是什么?输入文件是两种不同的编码(一种在Windows上,另一种在Mac上)?或者相同(两者都可能是UTF-8)?我猜测默认编码(Java假设,如果你不告诉读者)可能在Windows和Mac(甚至版本之间)上有所不同。

  • 当您阅读输入文件时,您打开输入文件的编码是什么? (这应该与上面的内容相符)。

  • 在处理文件时,您是否在输入和输出之间做了什么,可能引入了奇数字符? (例如,对Unicode值进行算术运算。)

答案 1 :(得分:0)

我找到了解决方案。 Mac使用与.java文件不同的编码,而不是Windows和Linux(我尝试过并且效果很好)。要使用UTF-8编码创建文件,必须使用以下选项运行程序:

java -Dfile.encoding=UTF-8 YourJavaClass

感谢您的帮助。