如何以UTF-8打开文件并以UTF-16写入另一个文件?
我需要一个例子,因为我遇到了'é'和'a'等字符的问题。
在写“médic”时,我在文件中找到了“m @#dic”。
答案 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范围之外的字符并查看字节实际是什么来验证编码。