我需要编写一个能够将UTF-8数据写入文件的程序。
我在互联网上发现了一些例子,但是,我无法达到预期的结果。
法典:
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
public class UTF8WriterDemo {
public static void main(String[] args) {
Writer out = null;
try {
out = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream("c://java//temp.txt"), "UTF-8"));
String text = "This texáát will be added to File !!";
out.write(text);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
一切都运行成功,但最后我看到特殊字符无法正确显示:此 tex 不会被添加到文件中!!
我尝试了互联网上的几个例子,结果相同。
我使用Visual Studio代码。
请问问题出在哪里?
谢谢
你的代码是正确的。您可能已经有一个名为 temp.txt 的文件,因此 Java 将文本写入现有文件(替换之前的内容)。可能出现的问题是已经在文件中设置的编码。
换句话说,您不能(或至少不应该)使用例如WINDOWS-1250编码将UTF-8文本写入文件,否则您将获得您所描述的确切结果。
如果您没有此文件,Java 将自动创建一个使用 UTF-8 编码的文件。
可能的解决方案:
- 更改当前文件的编码(通常您可以在任何文本编辑器中打开它,使用"另存为",然后将编码指定为 UTF-8。
- 删除此文件,Java 将使用正确的编码自动创建它。
顺便说一下,你应该使用StandardCharsets
类而不是使用String charsetName
以避免不受支持的编码异常:
new OutputStreamWriter(new FileOutputStream("temp.txt"), StandardCharsets.UTF_8)
当您说"我看到特殊字符未正确显示"时,您在哪里看到它们?
你接下来说/显示的内容看起来像字符串,utf-8编码(即重音的a每个由2个字符表示,似乎是适当的编码)。
我期望的问题是java代码没有在文件的开头输出BOM,而将utf-8序列的解释留给读者自行决定。