C# .NET:将.doc转换为.htm会产生时髦的字符
我使用MS Word automation将.doc保存为.htm。如果.doc文件中有项目符号字符,它们会很好地保存到.htm文件中,但是当我尝试将.htm文件读入字符串时(这样我可以随后将其作为字符串而不是blob发送到数据库进行最终存储),项目符号会转换为问号或其他字符,具体取决于加载到字符串中所使用的编码 我用这个来读课文:C# .NET:将.doc转换为.htm会产生时髦的字符,c#,encoding,C#,Encoding,我使用MS Word automation将.doc保存为.htm。如果.doc文件中有项目符号字符,它们会很好地保存到.htm文件中,但是当我尝试将.htm文件读入字符串时(这样我可以随后将其作为字符串而不是blob发送到数据库进行最终存储),项目符号会转换为问号或其他字符,具体取决于加载到字符串中所使用的编码 我用这个来读课文: string html = File.ReadAllText(myFileSpec); 我也尝试过使用StreamReader,但得到了相同的结果(可能File.
string html = File.ReadAllText(myFileSpec);
我也尝试过使用StreamReader,但得到了相同的结果(可能File.ReadAllText在内部使用了它)
我还尝试在File.ReadAllText的第二个重载中指定每种编码类型:
string html = File.ReadAllText(originalFile, Encoding.ASCII);
我已经尝试了编码类型的所有可用枚举
有什么想法吗?您是否尝试以二进制模式打开文件。如果你在测试模式下打开,我想它会切碎unicode字符。Word的
.doc
到。html
转换会将项目符号变成问号(而且它与文件.ReadAllText
或StreamReader
等无关)
i、 e.当它到达File.ReadAllText
时,它已经是一个问号
当我在Word2003中将一个简单的单词列表转换成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>
-
测试1
-
测试2
它很难看,但它不包含任何可能成为问号的内容这些字符在HTML文件中是什么样子的?这个文件的编码声明是什么(在元标记“Content Type”中)?理想情况下,这些字符应转换为实体或UTF-8字符。
回答这些问题可能会引导您找到解决方案…:-) 在我的系统上(使用美式英语),Word将*.htm文件保存在Windows-1252代码页中。如果您的系统使用该代码页,那么您应该将其作为代码页来读取
string html = File.ReadAllText(originalFile, Encoding.GetEncoding(1252));
不过,也有可能无论您使用的是什么视图,结果都会给您留下问号,所以请务必检查一下。好的,显然我在第一次陈述中撒了谎。我想我已经尝试了每种编码,但我没有尝试过:
data = File.ReadAllText(tempFile, Encoding.Default);
您可能认为这个方法的重载(您不指定编码)可以正常工作,默认编码应该是encoding.default。但是,默认情况下,它实际上使用Encoding.UTF8。希望这对其他人有所帮助。我必须以文本形式打开它,因为它将以文本形式存储在数据库中。问得好,但我已经验证过了。我们的编辑器实际上是在文档中插入项目符号字符,而不是使用项目符号列表。但是我找到了答案。见下文。