java utf8编码outputstream不起作用

时间:2019-01-28 18:49:15

标签: java encoding outputstream

我需要编写一个程序,该程序能够将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代码。

请问哪里出问题了?

谢谢

2 个答案:

答案 0 :(得分:0)

您的代码正确。您可能已经有一个名为 temp.txt 的文件,因此Java将文本写入现有文件(替换先前的内容)。可能存在问题的是您已经在文件中设置的编码。

换句话说,您不能(或至少不应)使用例如WINDOWS-1250编码将UTF-8文本写入文件,否则您将获得所描述的准确结果。

如果您没有此文件,Java将自动创建具有UTF-8编码的文件。

可能的解决方案:

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

为了避免UnsupportedEncodingException,应该使用StandardCharsets类而不是String charsetName

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

答案 1 :(得分:0)

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

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

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