如何在UTF-8中打开文件并在UTF-16中写入另一个文件

时间:2014-12-20 22:23:29

标签: java file encoding utf-8

如何以UTF-8打开文件并以UTF-16写入另一个文件?

我需要一个例子,因为我遇到了'é'和'a'等字符的问题。

在写“médic”时,我在文件中找到了“m @#dic”。

3 个答案:

答案 0 :(得分:4)

您可以按如下方式创建阅读器:

InputStream is = new FileInputStream(inputFile);
InputStreamReader in = new InputStreamReader(is, "UTF-8");

和作家如下:

OutputStream os = new FileOutputStream(outputFile);
OutputStreamWriter out = new OutputStreamWriter(os, "UTF-16");

答案 1 :(得分:3)

这样做:

try (
    final BufferedReader reader = Files.newBufferedReader(srcpath,
        StandardCharsets.UTF_8);
    final BufferedWriter writer = Files.newBufferedWriter(dstpath,
        StandardCharsets.UTF_16BE);
) {
    final char[] buf = new char[4096];
    int nrChars;
    while ((nrChars = reader.read(buf)) != -1)
        writer.write(buf, 0, nrChars);
    writer.flush();
}

注意:选择大端UTF-16。你没有告诉你想要哪一个。如果您想要小端,请改用UTF_16LE

另外,如果你想跳过bom,只需:

reader.read();
在循环写入字符之前

。 BOM为a single code point which happens to be in the BMP,因此可以使用。

答案 2 :(得分:0)

除了fge在评论中所说的内容之外,我不认为在你写出来时更改编码是你的问题。我的猜测是你正在阅读的文件不是UTF-8。使用像hexsode中的PsPad这样的编辑器打开该文件,然后查看文件的前两个或三个字节的字节顺序标记(BOM)。如果它有UTF-8 BOM,那我就错了。如果它根本没有BOM,那么该文件可能是OS的默认编码,而不是UTF-8。如果没有BOM,那么通常可以通过查看ASCII范围之外的字符并查看字节实际是什么来验证编码。