1

我使用 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 类型的所有可用枚举。

有任何想法吗?

4

5 回答 5

3

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

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

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

于 2008-11-07T20:37:34.187 回答
0

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

于 2008-11-07T18:51:16.070 回答
0

.docWord转换的问题不是将项目符号变成问号(并且它与等等.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>

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

于 2008-11-07T19:54:31.123 回答
0

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

于 2008-11-07T19:59:56.853 回答
0

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

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

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

于 2008-11-07T21:06:57.560 回答