转换后的Word文档(从Windows-1252到UTF-8)无法正确显示字符

时间:2014-05-21 09:42:50

标签: java encoding utf-8 character-encoding windows-1252

我有一个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控制台中的字符显示正确。

2 个答案:

答案 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

希望这有帮助!