.NET MS Interop Word 不在 UTF8 网页中保存文档

.NET MS Interop Word not saving document in UTF8 web page

注意:我用于测试的示例文档可以在以下位置找到:http://ftp.3gpp.org//Specs/archive/38_series/38.413/38413-100.zip

问题

我正在尝试使用以下代码将 MS Word 97-2003 文档 (.doc) 转换为 UTF-8 网页:

var wordApp = new Word.Application();
var doc = wordApp.Documents.Open("input.doc");
Console.WriteLine(doc.TextEncoding); // msoEncodingWestern
doc.SaveEncoding = MsoEncoding.msoEncodingUTF8;
doc.WebOptions.Encoding = MsoEncoding.msoEncodingUTF8;
doc.SaveAs2("output.htm", WdSaveFormat.wdFormatFilteredHTML, Encoding: MsoEncoding.msoEncodingUTF8);
doc.Close();
wordApp.Quit();

问题是文档包含某个字符,该字符在网页中呈现不正确:

在文档中

在网页中

(信息)手动方式

有关信息,如果我以如下手动方式执行上述操作,箭头字符将在网页中正确呈现。

我认为您以太多不同的方式引用了编码。您应该只需要设置一次。

试试这个:

var wordApp = new Word.Application();
var doc = wordApp.Documents.Open("input.doc");
doc.Fields.Update(); // ** this is the new line of code.
Console.WriteLine(doc.TextEncoding); // msoEncodingWestern
doc.WebOptions.Encoding = MsoEncoding.msoEncodingUTF8;
doc.SaveAs2("output.htm", WdSaveFormat.wdFormatFilteredHTML);
doc.Close();
wordApp.Quit();

我用以下方法解决了这个问题:

var from = ((char)0xF0AE).ToString();
var to = ((char)0x2192).ToString();
doc.Content.Find.Execute(from, ReplaceWith: to, Replace: WdReplace.wdReplaceAll);

这不是通用解决方案,即此方法仅处理右箭头的情况,如果左箭头有问题,则需要定义另一个方法。