我有一个脚本,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
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文件?
答案 0 :(得分: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'
中有特殊字符,则需要查看无效/未定义的替换选项。
您可能还想更新HTML meta
标记中的字符集:
text_as_utf8.gsub!('charset=windows-1252', 'charset=UTF-8')
在写入文件之前。
答案 1 :(得分:0)
我的解决方案是使用与用于保存它的Word相同的字符集打开HTML文件。 我还添加了一个白名单过滤器(Sanitize)来清理HTML。使用Nokogiri进行进一步的清洁,Sanitize也依赖它。
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 Sanitizer: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。
答案 2 :(得分:0)
Hi Bo Frederiksen和kardeiz,
我还遇到了&#34; Word Document.SaveAs忽略编码的问题&#34;今天在我的&#34; Word 2003(11.8411.8202)SP3&#34;版。
幸运的是,我设法让msoEncodingUTF8(即65001)在VBA代码中工作。但是,我必须先更改Word文档的设置。步骤是:
1)来自Word&#39;工具&#39;菜单,选择&#39;选项&#39;。
2)然后点击“常规”。
3)按“网络选项”&#39;按钮。
4)在弹出的“网络选项”中#4;对话,点击&#39;编码&#39;。
5)您可以找到一个组合框,现在您可以更改编码,例如,来自&#39; GB2312&#39; to&#39; Unicode(UTF-8)&#39;。
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