当前位置: 首页 > 知识库问答 >
问题:

转换的word文档(从Windows-1252到UTF-8)不能正确显示字符

司寇瑾瑜
2023-03-14

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

共有1个答案

尉迟远
2023-03-14

我有一个Windows-1252 word文档

那不是一个文本文件。Word文档基本上是二进制数据——用纯文本编辑器打开它,你会看到各种各样的胡言乱语。您可能会在其中看到一些文本,但基本上它不是纯文本文件,这就是您试图读取它的方式。

我甚至不清楚“视窗-1252单词文档”是什么意思...Word会在内部使用它想要的任何编码,我不确定是否有任何控制。我希望任何像样的“文档到PDF”转换器来处理任何有效的Word文档。

当我创建一个新的BufferedReader(使用UTF-8编码)并读取temp时,字符在IDE的控制台中正确显示。

如果是这样的话,这表明它是一个纯文本文件,而不是Word文档。您需要在自己的头脑中清楚地知道您到底拥有什么—Word文档或纯文本文件。他们不是一回事,不应该以同样的方式对待他们。

 类似资料:
  • 我正在尝试将我们的数据库从latin1转换为UTF-8。不幸的是,我不能做一个大规模的单一切换,因为应用程序需要保持在线,我们有700GB的数据库要转换。 因此,我试图利用mysql的一些技巧,将表转换为UTF-8,而不是数据。我希望数据能够被实时读取、转换和替换。(如果愿意,可以进行JIT转换) 我们的php应用程序目前使用所有默认值,所以它使用latin1字符集连接到mysql,并丢弃在lat

  • 我有一个缓冲区与字符编码在Windows 1252。然而,当我用适当的编码创建一个新的字符串时,而不是预期的结果,我经常会得到询问标记,例如。 因此,系统应在其上方显示带“^”的“u”字符。而是显示“?”。 任何想法?

  • 我正在编写一个PERL脚本,它从一个数据库中读取数据。XLSX Excel文件,并将数据插入Oracle数据库。数据库采用Windows-1252编码,excel文件采用UTF-8编码(据我所知,这是xlsx文件的标准),特殊字符如ö、ü、ű、ő显示为??。正确的转换方法是什么。xlsx文件?在将读取的字符串插入数据库之前,我曾尝试将其转换为windows-1252,并尝试将整个Excel文件转换

  • 我试图保存一个字符串在希伯来文文件,同时有文件ANSI编码。恐怕所有的尝试都失败了。 PHP文件本身是UTF-8 这是我正在尝试的代码: 由于某种原因,返回false。 另一次尝试是: 这返回一个空字符串。当这不起作用时,将输出字符集更改为Windows-1255的工作。所以函数本身工作,但由于某种原因,它不转换为1252。 我运行这个函数之前和之后的和打印的结果 在图标之前编码是UTF-8,在图

  • 我有UTF-8源数据,我必须创建在Windows 1252字符编码编码的CSV文件。 我尝试了经典功能,但效果不佳。它必须支持转换后的塞尔维亚字符: "čćžšđ" 。 此外,我还尝试转换为CP1252、ISO-8859-1、ISO-8859-2,功能包括:mb_convert_编码、iconv和iconv_set_编码。 有人知道该试试什么吗?

  • 问题内容: 我从外部Microsoft SQL 2008数据库接收数据(我通过My​​Batis进行查询)。在理论中,我在“ Windows-1252”上接收数据编码。 我尝试使用以下代码解码数据: 字符串textoFormado = …来自MyBatis的值…; String s = new String(textoFormado.getBytes(“ Windows-1252”),“ UTF-