我需要编写一个程序,该程序能够将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();
}
}
}
一切正常,但是最后我看到特殊字符显示不正确: 此文本将被添加到File !!
我从互联网上尝试了几个例子,结果都一样。
我使用Visual Studio代码。
请问哪里出问题了?
谢谢
答案 0 :(得分:0)
您的代码正确。您可能已经有一个名为 temp.txt 的文件,因此Java将文本写入现有文件(替换先前的内容)。可能存在问题的是您已经在文件中设置的编码。
换句话说,您不能(或至少不应)使用例如WINDOWS-1250编码将UTF-8文本写入文件,否则您将获得所描述的准确结果。
如果您没有此文件,Java将自动创建具有UTF-8编码的文件。
可能的解决方案:
为了避免UnsupportedEncodingException,应该使用StandardCharsets
类而不是String charsetName
new OutputStreamWriter(new FileOutputStream("temp.txt"), StandardCharsets.UTF_8)
答案 1 :(得分:0)
当您说“我看到特殊字符显示不正确”时,您在哪里看到它们?
您接下来要说/显示的内容看起来像字符串,utf-8 编码(即每个带重音的 a 由 2 个字符表示,似乎是适当的编码)。
我期望的问题是 java 代码没有在文件的开头输出 BOM,将 utf-8 序列的解释留给读者自行决定。