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

C# 将Word保存为UTF-8编码的HTML,c#,encoding,utf-8,ms-word,vsto,C#,Encoding,Utf 8,Ms Word,Vsto,我正在编写一些C#VSTO代码,用于读取Microsoft Word文档并将其保存为过滤后的HTML。在通用Word文档上执行此功能时,html文件的输出使用Windows字符集,如下所示: <meta http-equiv=Content-Type content="text/html; charset=windows-1252"> (注意:我试着把65001用引号括起来,不加引号..既不抛出错误,也不起作用) 接下来,我继续设置文档的web选项,如下所示: <meta h

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

<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
(注意:我试着把65001用引号括起来,不加引号..既不抛出错误,也不起作用)

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

<meta http-equiv=Content-Type content="text/html; charset=utf-8">
doc = app.Documents.Open("C:\\Temp\\Test.docx");
doc.WebOptions.Encoding = Microsoft.Office.Core.MsoEncoding.msoEncodingUTF8;
doc.SaveAs2(destFile, MsWord.WdSaveFormat.wdFormatFilteredHTML);
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
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);
据我所知,上述代码执行的功能与我手动打开文件、转到文件->选项…、设置为UTF-8并将文件保存为筛选的html完全相同,但输出仍然如下所示:

<meta http-equiv=Content-Type content="text/html; charset=utf-8">
doc = app.Documents.Open("C:\\Temp\\Test.docx");
doc.WebOptions.Encoding = Microsoft.Office.Core.MsoEncoding.msoEncodingUTF8;
doc.SaveAs2(destFile, MsWord.WdSaveFormat.wdFormatFilteredHTML);
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
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);


有没有一种方法可以强制Microsoft Word将文件输出到UTF-8,而不必先手动配置文档?

在撰写本文时,我不清楚我的特定版本的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);
然后,更改代码以刷新文档的字段,如下所示:

<meta http-equiv=Content-Type content="text/html; charset=utf-8">
doc = app.Documents.Open("C:\\Temp\\Test.docx");
doc.WebOptions.Encoding = Microsoft.Office.Core.MsoEncoding.msoEncodingUTF8;
doc.SaveAs2(destFile, MsWord.WdSaveFormat.wdFormatFilteredHTML);
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
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);

在Visual Studio中,您必须添加引用:

在您的项目中:

'MyProject'>Solution Explorer>References>Add Reference>COM>Microsoft Office 16.0对象库


VS给出了一个非常隐晦的错误,它对查找库没有帮助。

使用
doc.WebOptions.Encoding=msoEncodingUTF8
对我很有用。你确定你检查的文件是正确的吗?@DirkVollmar,我一直在尝试这个,但它不起作用。然后,我之前做了一个Doc.Fields.Update(),它成功了。奇怪,谢谢,这救了我的命,很高兴有帮助。真是令人沮丧!哈哈,现在我的客户只想使用Word转换为PDF,因为他们不喜欢HTML转换。算了吧,哈哈……至少你的腰带上还有另一个工具,准备下一个:-)