【问题标题】:.NET: Convert .doc to .htm results in funky characters.NET:将 .doc 转换为 .htm 会产生时髦的字符
【发布时间】:2008-11-07 18:45:51
【问题描述】:

我使用 MS Word 自动化将 .doc 保存为 .htm。如果 .doc 文件中有项目符号字符,它们会很好地保存到 .htm,但是当我尝试将 .htm 文件读入字符串时(因此我可以随后将其发送到数据库以作为字符串进行最终存储,而不是blob),项目符号会根据用于加载到字符串中的编码转换为问号或其他字符。

我正在用它来阅读文本:

string html = File.ReadAllText(myFileSpec);

我也尝试过使用 StreamReader,但得到了相同的结果(可能是 File.ReadAllText 在内部使用的)。

我还尝试在 File.ReadAllText 的第二个重载中指定每种类型的编码:

string html = File.ReadAllText(originalFile, Encoding.ASCII);

我已经尝试了 Encoding 类型的所有可用枚举。

有什么想法吗?

【问题讨论】:

    标签: c# encoding


    【解决方案1】:

    在我的系统上(使用美国英语)Word 将 *.htm 文件保存在 Windows-1252 代码页中。如果您的系统使用该代码页,那么这就是您应该阅读的内容。

    string html = File.ReadAllText(originalFile, Encoding.GetEncoding(1252));
    

    也有可能,无论您使用视图,结果都可能为您创建问号,因此请务必检查。

    【讨论】:

      【解决方案2】:

      您是否尝试以二进制模式打开文件。如果你在测试模式下打开,我认为它会破坏 unicode 字符。

      【讨论】:

      • 我必须将它作为文本打开,因为它将作为文本存储在数据库中。
      【解决方案3】:

      这些字符在 HTML 文件中是什么样的?该文件的编码声明是什么(在元标记“Content-Type”中)?理想情况下,这些字符应转换为实体或 UTF-8 字符。
      回答这些问题可能会引导您找到解决方案... :-)

      【讨论】:

        【解决方案4】:

        Word 的.doc.html 转换将项目符号点变成问号不是问题吗(与File.ReadAllTextStreamReader 等没有任何关系)?

        即当它到达File.ReadAllText 时,它已经是一个问号了。

        当我在 Word 2003 中将一个简单的 Word 列表转换为 HTML 时,我得到了

         <ul style='margin-top:0cm' type=disc> 
             <li class=MsoNormal style='mso-list:l0 level1 lfo1;tab-stops:list 36.0pt'>
               <span lang=EN-GB style='mso-ansi-language:EN-GB'>Test 1</span>
             </li> 
             <li class=MsoNormal style='mso-list:l0 level1 lfo1;tab-stops:list 36.0pt'>
               <span lang=EN-GB style='mso-ansi-language:EN-GB'>Test 2</span>
             </li> 
         </ul>
        

        它很丑,但它不包含任何可能成为问号的东西

        【讨论】:

        • 好问题,但我已经验证过了。我们的编辑实际上是在文档中插入项目符号字符,而不是使用项目符号列表。虽然找到了答案。见下文。
        【解决方案5】:

        好吧,显然我在第一句话中撒了谎。我以为我已经尝试过所有编码,但我没有尝试过:

        data = File.ReadAllText(tempFile, Encoding.Default);
        

        您会认为在不指定编码的情况下重载此方法可以正常工作,因为默认编码是 Encoding.Default。但是,它实际上默认使用 Encoding.UTF8。希望这对其他人有帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-19
          • 1970-01-01
          • 2015-11-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多