Java UTF8 编码输出流不起作用



我需要编写一个能够将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 编码的文件。

可能的解决方案:

  1. 更改当前文件的编码(通常您可以在任何文本编辑器中打开它,使用"另存为",然后将编码指定为 UTF-8
  2. 删除此文件,Java 将使用正确的编码自动创建它。

顺便说一下,你应该使用StandardCharsets类而不是使用String charsetName以避免不受支持的编码异常:

new OutputStreamWriter(new FileOutputStream("temp.txt"), StandardCharsets.UTF_8)

当您说"我看到特殊字符未正确显示"时,您在哪里看到它们?

你接下来说/显示的内容看起来像字符串,utf-8编码(即重音的a每个由2个字符表示,似乎是适当的编码)。

我期望的问题是java代码没有在文件的开头输出BOM,而将utf-8序列的解释留给读者自行决定。

最新更新