我有一个Windows-1252 word文档,我想将其转换为UTF-8。我需要这样做才能正确地将doc文件转换为pdf。 这就是我目前的做法:
Path source = Paths.get("source.doc");
Path temp = Paths.get("temp.doc");
try (BufferedReader sourceReader = new BufferedReader(new InputStreamReader(new FileInputStream(source.toFile()), "windows-1252"));
BufferedWriter tempWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(temp.toFile()), "UTF-8"))) {
String line;
while ((line = sourceReader.readLine()) != null) {
tempWriter.write(line);
}
}
但是,当我在Word中打开转换后的文件(temp.doc
)时,它无法正确显示某些字符。 Ü将成为例如。
我该如何解决这个问题?当我创建一个新的BufferedReader(使用UTF-8编码)并且我读temp
时,我的IDE控制台中的字符显示正确。
答案 0 :(得分:2)
我有一个Windows-1252 word文档
那不是文本文件。 Word文档基本上是二进制数据 - 用纯文本编辑器打开它,你会看到各种乱码。你可能会看到一些文本,但基本上它是不是一个纯文本文件,这就是你试图阅读它的方式。
我甚至不清楚“Windows-1252 word文档”是什么意思...... Word会在内部使用它想要的任何编码,而且我不确定是否可以控制它。我希望期待任何体面的“doc to PDF”转换器来处理任何有效的Word文档。
当我创建一个新的BufferedReader(使用UTF-8编码)并且我读取temp时,这些字符在我的IDE的控制台中正确显示。
如果是这种情况,那表明 是一个纯文本文件,而不是Word文档。您需要非常清楚地了解您所拥有的内容 - Word文档或纯文本文件。它们不是一回事,不应该以同样的方式对待。
答案 1 :(得分:-1)
要强制Excel使用UTF-8编码,我使用了字节顺序标记(在任何其他内容之前):
tempWriter.write('\uFEFF'); // byte order mark to let Excel know to expect UTF-8
希望这有帮助!