Board logo

标题: [文本处理] VBS把txt转化成doc,但是txt是utf8编码的,转化后会乱码,求解 [打印本页]

作者: serena    时间: 2015-3-9 22:14     标题: VBS把txt转化成doc,但是txt是utf8编码的,转化后会乱码,求解

代码如下,我的TXT是含有数字+字母+汉字+符号。编码是UTF-8,操作以下代码转成的DOC,就会变成乱码


但如果TXT改编码为ANSI就正常,是里面哪个地方错了吗?不能UTF-8转后不乱码吗?
  1. Dim FSO,s
  2. Set FSO=CreateObject("Scripting.FileSystemObject")
  3. Set AllF=FSO.GetFolder(fso.GetParentFolderName (WScript.ScriptFullName ))
  4. For Each file In AllF.Files
  5.     if right(file,3)="txt" then zhuanhuan file
  6. Next
  7. msgbox "已经将所有文本文件转换成WORD文件!",48+4096,"操作成功"
  8. sub zhuanhuan(filename)
  9.     name=fso.getbasename(filename)
  10.     set file=fso.opentextfile(filename)
  11.     s=file.readall
  12.     file.close
  13.     Set objWord = CreateObject("Word.Application")
  14.     'objWord.Visible = True
  15.     Set objDoc = objWord.Documents.Add()
  16.     For i = 1 To Len(s) Step 20000
  17.         objword.Selection.TypeText Mid(s, i, 20000)
  18.     Next
  19.     objword.ActiveDocument.SaveAs AllF & "\" & name & ".doc"
  20.     objword.quit
  21. end sub
复制代码

作者: CrLf    时间: 2015-3-9 23:44

因为 fso.opentextfile 不支持 utf-8

自动判断编码并处理:
  1. <script src=http://bbs.bathome.net/lib/diy/WSH.js></script>
  2. <script src=http://bbs.bathome.net/lib/diy/iconv.js></script>
  3. <script language=vbscript>
  4. on error resume next
  5. Dim FSO,s
  6. Set FSO=CreateObject("Scripting.FileSystemObject")
  7. Set AllF=FSO.GetFolder(fso.GetParentFolderName (WScript.ScriptFullName ))
  8. For Each file In AllF.Files
  9. If Right(file,3)="txt" Then
  10. zhuanhuan CStr(file)
  11. End If
  12. Next
  13. msgbox "已经将所有文本文件转换成WORD文件!",48+4096,"操作成功"
  14. sub zhuanhuan(filename)
  15. name=fso.getbasename(filename)
  16. s=""
  17. bin = iconv.load(filename)
  18. If Not isNull(bin) Then
  19. bom = iconv.checkBom(bin)
  20. If bom="undefined" Then bom="gb2312"
  21. s=iconv.toStr(bin,bom)
  22. End If
  23. Set objWord = CreateObject("Word.Application")
  24. 'objWord.Visible = True
  25. Set objDoc = objWord.Documents.Add()
  26. For i = 1 To Len(s) Step 20000
  27. objword.Selection.TypeText Mid(s, i, 20000)
  28. Next
  29. objword.ActiveDocument.SaveAs AllF & "\" & name & ".doc"
  30. objword.quit
  31. end Sub
  32. </script>
复制代码

作者: serena    时间: 2015-3-9 23:51

运行不了呢,提示缺少对象iconv
作者: CrLf    时间: 2015-3-10 00:57

忘了说,是保存为 .hta 后缀
作者: serena    时间: 2015-3-10 10:11

哦,是可以,但是有简单点的不,vbs,python,或是bat。就是直接全部源码都有,不带这样托管源码的有吗?谢版主了
作者: serena    时间: 2015-3-10 10:19

主要是俺处理文本的那电脑,有些时候都没联网的,怕运行不了呀
作者: serena    时间: 2015-3-10 10:50

比如我把这个放在路径----G:\转换.hta
在G盘里有文件夹A,在里面有N多个文件夹B,然后再里面才是TXT
现在我想把N多个文件夹都转换了,要咋改捏
作者: CrLf    时间: 2015-3-10 15:59

本帖最后由 CrLf 于 2015-3-11 02:31 编辑

办法1
自行改写 vbs

办法2
改用 powershell

办法3
改用第三方工具 iconv

办法4
改用 wsf 直接包含 iconv.js 的内容

办法5
在 vbs 部分之前加上下面这段,在有网络的情况下运行一次,以后就可以带着走了:
  1. <script src=http://www.bathome.net/lib/diy/Libs.js></script>
  2. <script>
  3. Libs.offline(true)
  4. //将脚本离线化,并中止脚本,下次运行可脱机
  5. </script>
复制代码

作者: zz100001    时间: 2015-3-10 17:56

你那是买椟还珠了,既然都用了word,他天生就能打开文本文档,为什么还要自己去读取字符呢?
  1. Dim FSO,s
  2. Set FSO=CreateObject("Scripting.FileSystemObject")
  3. Set AllF=FSO.GetFolder(fso.GetParentFolderName (WScript.ScriptFullName ))
  4. For Each file In AllF.Files
  5.     if right(file,3)="txt" then zhuanhuan file
  6. Next
  7. msgbox "已经将所有文本文件转换成WORD文件!",48+4096,"操作成功"
  8. sub zhuanhuan(filename)
  9.     name=fso.getbasename(filename)
  10.     Set objWord = CreateObject("Word.Application")
  11.     'objWord.Visible = True
  12.     Set objDoc = objWord.Documents.Open(filename.path)
  13.     objDoc.SaveAs AllF & "\" & name & ".doc", 0
  14.     objword.quit
  15. end sub
复制代码

作者: serena    时间: 2015-3-17 13:36

回复 9# zz100001


大哥呀,运行不了呢。存为VBS后缀的,打开就这样
作者: CrLf    时间: 2015-3-17 14:09

回复 10# serena


    存为 ansi 编码




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2