如何打开一个UTF-8编码的文件并将其写入到另一个UTF-16编码的文件中?
我需要一个示例,因为我在处理一些字符(如'é'和'a')时遇到了问题。
当写入“médic”时,我发现在文件中写入了“m@#dic”。
InputStream is = new FileInputStream(inputFile);
InputStreamReader in = new InputStreamReader(is, "UTF-8");
and a writer as follows:
OutputStream os = new FileOutputStream(outputFile);
OutputStreamWriter out = new OutputStreamWriter(os, "UTF-16");
请执行以下操作:
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是一个恰好在BMP中的单个码点,所以这将起作用。
补充fge在评论中提到的,我认为在写出时更改编码不是你的问题。 我猜测你读取的文件不是UTF-8格式。 以十六进制模式使用像PsPad这样的编辑器打开该文件,并查看文件的前两个或三个字节以获取字节顺序标记(BOM)。 如果它具有UTF-8 BOM,则我是错误的。 如果根本没有BOM,则该文件可能处于操作系统的默认编码而不是UTF-8。 如果没有BOM,则通常可以通过查看ASCII范围之外的字符并查看实际字节来验证编码。