找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 29504|回复: 10

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

[复制链接]
发表于 2015-3-9 22:14:58 | 显示全部楼层 |阅读模式
代码如下,我的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
复制代码
发表于 2015-3-9 23:44:55 | 显示全部楼层
因为 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>
复制代码
 楼主| 发表于 2015-3-9 23:51:19 | 显示全部楼层
运行不了呢,提示缺少对象iconv
发表于 2015-3-10 00:57:35 | 显示全部楼层
忘了说,是保存为 .hta 后缀
 楼主| 发表于 2015-3-10 10:11:14 | 显示全部楼层
哦,是可以,但是有简单点的不,vbs,python,或是bat。就是直接全部源码都有,不带这样托管源码的有吗?谢版主了
 楼主| 发表于 2015-3-10 10:19:03 | 显示全部楼层
主要是俺处理文本的那电脑,有些时候都没联网的,怕运行不了呀
 楼主| 发表于 2015-3-10 10:50:52 | 显示全部楼层
比如我把这个放在路径----G:\转换.hta
在G盘里有文件夹A,在里面有N多个文件夹B,然后再里面才是TXT
现在我想把N多个文件夹都转换了,要咋改捏
发表于 2015-3-10 15:59:30 | 显示全部楼层
本帖最后由 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>
复制代码
发表于 2015-3-10 17:56:13 | 显示全部楼层
你那是买椟还珠了,既然都用了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
复制代码

评分

参与人数 1技术 +1 收起 理由
CrLf + 1 一语惊醒梦中人

查看全部评分

 楼主| 发表于 2015-3-17 13:36:52 | 显示全部楼层
回复 9# zz100001


大哥呀,运行不了呢。存为VBS后缀的,打开就这样
发表于 2015-3-17 14:09:25 | 显示全部楼层
回复 10# serena


    存为 ansi 编码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 12:50 , Processed in 0.029338 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表