java - 在 Java 中创建 UTF-8 文件

标签 java file-io utf-8

我目前正在制作一个将中文单词保存到文本文件中的程序。我用 java 创建文本文件,然后尝试向其中写入文字。但是,我创建的文本文件从未以 UTF-8 编码。这是我正在使用的代码,为什么它不起作用?我被告知 Java 中存在一个固有的错误,但我不知道如何解决它。

public void createFile(String name) {
    try {
        BufferedWriter out = new BufferedWriter(new OutputStreamWriter(
        new FileOutputStream(name +".txt"), "UTF-8"));
        out.write("");
    }
    catch(java.io.IOException e) {
        System.err.println("Something went wrong.");
    }
}

此外,除了仍然可以使用 UTF 编码的文本文件之外,我还有其他选择吗?

我还通过打开 TextEdit 应用程序并尝试编写汉字来测试其编码。这也会是个问题吗?

最佳答案

首先,文件本身没有编码。它们是一堆 0 和 1。如果你用 utf-8 编写“asdf”,它与普通的旧 ascii7 完全没有区别。

如果您使用 utf-16 编写,那么字节顺序标记 (BOM) 将非常清楚地表明它是使用 utf-16 编写的,即使是空字符串,但 utf-8 不会需要存在这样的标记。

因此,您的编辑器无法知道该文件应该是用 utf-8 编写的。您可以通过以下方式将 utf-8 的 BOM 写入您的文件:

out.write(0xEFBBBF);

但是,在这种情况下,out 必须是一个 OutputStream,例如 FileOutputStream。 (BufferedWriter 和 OutputStreamWriter 不接受字节数组作为输入。)

关于java - 在 Java 中创建 UTF-8 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8116530/

相关文章:

java - 将 JTree (CheckboxTree) 添加到 JDialog

java - 如何修复在 Jboss 域模式下部署应用程序对数据库的重复插入?

c - 如何使用 open 以 "append"模式打开文件?打开?

c - fread 函数未存储到缓冲区中

delphi - 目标多字节代码页中不存在 Unicode 字符的映射

Spring Boot UTF-8 编码问题。我怀疑它试图将 ISO-8859-1 编码为 UTF-8

java - Eclipse Maven - 没有 'package' 选项

java - 为什么原始流没有收集(收集器)?

java - 针对小文件优化Java的NIO

encoding - 日语编码中的中文