我正在创建一个非常简单的应用程序,它从一个文件读取一些输入并生成包含该信息的另一个文件。我在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,但是特殊字符,如¿,á,é,í,¡等。显示错误。
为什么会发生这种情况?
答案 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
感谢您的帮助。