3

我有一个脚本,VBS 或 Ruby,将 Word 文档保存为“过滤的 HTML”,但编码参数被忽略。HTML 文件始终以 Windows-1252 编码。我在 Windows 7 SP1 上使用 Word 2007 SP3。

红宝石示例:

require 'win32ole'
word = WIN32OLE.new('Word.Application')
word.visible = false
word_document = word.documents.open('C:\whatever.doc')
word_document.saveas({'FileName' => 'C:\whatever.html', 'FileFormat' => 10, 'Encoding' => 65001})
word_document.close()
word.quit

VBS 示例:

Option Explicit
Dim MyWord
Dim MyDoc
Set MyWord = CreateObject("Word.Application")
MyWord.Visible = False
Set MyDoc = MyWord.Documents.Open("C:\whatever.doc")
MyDoc.SaveAs "C:\whatever2.html", 10, , , , , , , , , , 65001
MyDoc.Close
MyWord.Quit
Set MyDoc = Nothing
Set MyWord = Nothing

文档:

Document.SaveAs:http: //msdn.microsoft.com/en-us/library/bb221597.aspx

msoEncoding 值: http: //msdn.microsoft.com/en-us/library/office/aa432511 (v=office.12).aspx

任何建议,如何让 Word 以 UTF-8 保存 HTML 文件?

4

3 回答 3

0

嗨 Bo Frederiksen 和 kardeiz,

今天在我的“Word 2003 (11.8411.8202) SP3”版本中也遇到了“Word Document.SaveAs忽略编码”的问题。

幸运的是,我设法使 msoEncodingUTF8(即 65001)在 VBA 代码中工作。但是,我必须先更改 Word 文档的设置。步骤是:

1) 从 Word 的“工具”菜单中,选择“选项”。

2) 然后单击“常规”。

3) 按“网络选项”按钮。

4) 在弹出的“Web 选项”对话框中,单击“编码”。

5)你可以找到一个组合框,现在你可以改变编码,例如,从'GB2312'到'Unicode(UTF-8)'。

6) 保存更改并尝试重新运行 VBA 代码。

希望我的回答能帮到你。下面是我的代码。

Public Sub convert2html()
    With ActiveDocument.WebOptions
        .Encoding = msoEncodingUTF8
    End With

    ActiveDocument.SaveAs FileName:=ActiveDocument.Path & "\" & "file_name.html", FileFormat:=wdFormatFilteredHTML, Encoding:=msoEncodingUTF8

End Sub
于 2014-05-23T09:11:18.067 回答
0

我的解决方案是使用与 Word 保存它时相同的字符集打开 HTML 文件。我还添加了一个白名单过滤器 (Sanitize),以清理 HTML。使用 Sanitize 也依赖的 Nokogiri 进行进一步清洁。

require 'sanitize'

# ... add some code converting a Word file to HTML.

# Post export cleanup.
html_file = File.open(html_file_name, "r:windows-1252:utf-8")
html = '<!DOCTYPE html>' + html_file.read()
html_document = Nokogiri::HTML::Document.parse(html)
Sanitize.new(Sanitize::Config::RESTRICTED).clean_node!(html_document)
html_document.css('html').first['lang'] = 'en-US'
html_document.css('meta[name="Generator"]').first.remove()

# ... add more cleaning up of Words HTML noise.

sanitized_html = html_document.to_html({:encoding => 'utf-8', :indent => 0})
# writing output to (new) file
sanitized_html_file_name = word_file_name.sub(/(.*)\..*$/, '\1.html')
File.open(sanitized_html_file_name, 'w:UTF-8') do |f|
    f.write sanitized_html
end

HTML 消毒剂:https ://github.com/rgrove/sanitize/

HTML 解析器和修改器:http: //nokogiri.org/

在 Word 2010 中有一种新方法 SaveAs2: http: //msdn.microsoft.com/en-us/library/ff836084 (v=office.14).aspx

我没有测试 SaveAs2,因为我没有 Word 2010。

于 2013-01-18T10:57:25.910 回答
0

据我所知,Word 无法做到这一点。

但是,您可以将以下行添加到 Ruby 脚本的末尾

text_as_utf8 = File.read('C:\whatever.html').encode('UTF-8')
File.open('C:\whatever.html','wb') {|f| f.print text_as_utf8}

如果您有旧版本的 Ruby,您可能需要使用Iconv. 如果您在 中有特殊字符'C:\whatever.html',则需要查看无效/未定义的替换选项。

您可能还想更新 HTMLmeta标记中的字符集:

text_as_utf8.gsub!('charset=windows-1252', 'charset=UTF-8')

在写入文件之前。

于 2013-01-17T18:59:09.840 回答