将 Word 保存为 UTF-8 编码的 HTML

Bil*_*ill 4 c# encoding vsto ms-word utf-8

我正在编写一些 C# VSTO 代码来读取 Microsoft Word 文档并将其保存到过滤的 HTML。当我在通用 Word 文档上执行此功能时,html 文件的输出使用 Windows 字符集,如下所示:

<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
Run Code Online (Sandbox Code Playgroud)

如果我打开一个文档并转到 File->Options->Advanced->Web Options,我可以选择 UTF8,结果过滤后的 html 文档输出如下所示:

<meta http-equiv=Content-Type content="text/html; charset=utf-8">
Run Code Online (Sandbox Code Playgroud)

我想编写 C# 代码,将任何Word 文档保存为使用 utf-8 过滤的 html。在做了一些研究之后,我发现有些人说“SaveAs2”功能不起作用(即使 Microsoft 将其记录为一项功能)。这意味着,此代码对我不起作用:

doc.SaveAs2("C:\\Temp\\Test.htm", MsWord.WdSaveFormat.wdFormatFilteredHTML, Encoding: "65001");
Run Code Online (Sandbox Code Playgroud)

(注意:我尝试将 65001 放在引号中而不使用引号......既不会抛出错误,也不会起作用)。

接下来,我继续为文档设置 Web 选项,如下所示:

doc = app.Documents.Open("C:\\Temp\\Test.docx");
doc.WebOptions.Encoding = Microsoft.Office.Core.MsoEncoding.msoEncodingUTF8;
doc.SaveAs2(destFile, MsWord.WdSaveFormat.wdFormatFilteredHTML);
Run Code Online (Sandbox Code Playgroud)

据我所知,上面的代码执行与我手动打开文件完全相同的功能,转到文件->选项...,设置为 UTF-8 并将文件保存到过滤的 html,但输出仍然看起来像这个:

<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
Run Code Online (Sandbox Code Playgroud)

有没有办法强制 Microsoft Word 将文件输出为 UTF-8,而无需先手动配置文档?

Bil*_*ill 5

在撰写本文时,尚不清楚我是否遇到了特定版本的 Microsoft Word(Word Online)或 VSTO 模板的错误,但我将在这里回答是什么使我如此工作。

如果此代码不起作用:

doc = app.Documents.Open("C:\\Temp\\Test.docx");
doc.WebOptions.Encoding = Microsoft.Office.Core.MsoEncoding.msoEncodingUTF8;
doc.SaveAs2("C:\\Temp\\Test.htm", MsWord.WdSaveFormat.wdFormatFilteredHTML);
Run Code Online (Sandbox Code Playgroud)

然后,更改代码以刷新文档的字段,如下所示:

doc = app.Documents.Open("C:\\Temp\\Test.docx");

doc.Fields.Update(); // ** this is the new line of code.

doc.WebOptions.Encoding = Microsoft.Office.Core.MsoEncoding.msoEncodingUTF8;
doc.SaveAs2("C:\\Temp\\Test.htm", MsWord.WdSaveFormat.wdFormatFilteredHTML);
Run Code Online (Sandbox Code Playgroud)