标题: [文本处理] VBS把txt转化成doc,但是txt是utf8编码的,转化后会乱码,求解 [打印本页]
作者: serena 时间: 2015-3-9 22:14 标题: VBS把txt转化成doc,但是txt是utf8编码的,转化后会乱码,求解
代码如下,我的TXT是含有数字+字母+汉字+符号。编码是UTF-8,操作以下代码转成的DOC,就会变成乱码
但如果TXT改编码为ANSI就正常,是里面哪个地方错了吗?不能UTF-8转后不乱码吗?- Dim FSO,s
- Set FSO=CreateObject("Scripting.FileSystemObject")
- Set AllF=FSO.GetFolder(fso.GetParentFolderName (WScript.ScriptFullName ))
- For Each file In AllF.Files
- if right(file,3)="txt" then zhuanhuan file
- Next
- msgbox "已经将所有文本文件转换成WORD文件!",48+4096,"操作成功"
- sub zhuanhuan(filename)
- name=fso.getbasename(filename)
- set file=fso.opentextfile(filename)
- s=file.readall
- file.close
- Set objWord = CreateObject("Word.Application")
- 'objWord.Visible = True
- Set objDoc = objWord.Documents.Add()
- For i = 1 To Len(s) Step 20000
- objword.Selection.TypeText Mid(s, i, 20000)
- Next
- objword.ActiveDocument.SaveAs AllF & "\" & name & ".doc"
- objword.quit
- end sub
复制代码
作者: CrLf 时间: 2015-3-9 23:44
因为 fso.opentextfile 不支持 utf-8
自动判断编码并处理:- <script src=http://bbs.bathome.net/lib/diy/WSH.js></script>
- <script src=http://bbs.bathome.net/lib/diy/iconv.js></script>
-
- <script language=vbscript>
- on error resume next
-
- Dim FSO,s
- Set FSO=CreateObject("Scripting.FileSystemObject")
- Set AllF=FSO.GetFolder(fso.GetParentFolderName (WScript.ScriptFullName ))
- For Each file In AllF.Files
- If Right(file,3)="txt" Then
- zhuanhuan CStr(file)
- End If
- Next
-
- msgbox "已经将所有文本文件转换成WORD文件!",48+4096,"操作成功"
-
- sub zhuanhuan(filename)
- name=fso.getbasename(filename)
-
- s=""
- bin = iconv.load(filename)
- If Not isNull(bin) Then
- bom = iconv.checkBom(bin)
- If bom="undefined" Then bom="gb2312"
- s=iconv.toStr(bin,bom)
- End If
-
- Set objWord = CreateObject("Word.Application")
- 'objWord.Visible = True
- Set objDoc = objWord.Documents.Add()
- For i = 1 To Len(s) Step 20000
- objword.Selection.TypeText Mid(s, i, 20000)
- Next
- objword.ActiveDocument.SaveAs AllF & "\" & name & ".doc"
- objword.quit
- end Sub
- </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 部分之前加上下面这段,在有网络的情况下运行一次,以后就可以带着走了:- <script src=http://www.bathome.net/lib/diy/Libs.js></script>
- <script>
- Libs.offline(true)
- //将脚本离线化,并中止脚本,下次运行可脱机
- </script>
复制代码
作者: zz100001 时间: 2015-3-10 17:56
你那是买椟还珠了,既然都用了word,他天生就能打开文本文档,为什么还要自己去读取字符呢?- Dim FSO,s
- Set FSO=CreateObject("Scripting.FileSystemObject")
- Set AllF=FSO.GetFolder(fso.GetParentFolderName (WScript.ScriptFullName ))
- For Each file In AllF.Files
- if right(file,3)="txt" then zhuanhuan file
- Next
- msgbox "已经将所有文本文件转换成WORD文件!",48+4096,"操作成功"
- sub zhuanhuan(filename)
- name=fso.getbasename(filename)
- Set objWord = CreateObject("Word.Application")
- 'objWord.Visible = True
- Set objDoc = objWord.Documents.Open(filename.path)
- objDoc.SaveAs AllF & "\" & name & ".doc", 0
- objword.quit
- end sub
复制代码
作者: serena 时间: 2015-3-17 13:36
回复 9# zz100001
大哥呀,运行不了呢。存为VBS后缀的,打开就这样
作者: CrLf 时间: 2015-3-17 14:09
回复 10# serena
存为 ansi 编码
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |