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

[文本处理] [已解决]请问UTF-8如何批量转为ANSI?

[复制链接]
发表于 2012-12-1 14:18:12 | 显示全部楼层 |阅读模式
本帖最后由 每天几分 于 2012-12-2 17:31 编辑

有些txt文件混杂了UTF-8格式的,数千个文件,不知是哪一个,请问如何将同一文件夹内的UTF-8格式的文本全部转为ANSI格式?

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2012-12-1 20:39:10 | 显示全部楼层
 楼主| 发表于 2012-12-1 20:55:00 | 显示全部楼层
回复 2# Batcher


    不太懂……
发表于 2012-12-1 20:56:59 | 显示全部楼层
回复 3# 每天几分


    多看几遍
 楼主| 发表于 2012-12-1 21:26:48 | 显示全部楼层
回复 4# Batcher


    好吧……
 楼主| 发表于 2012-12-1 22:07:23 | 显示全部楼层
回复 4# Batcher

下面这个VBS可以逐个拖进转换,可以修改一下么,改成把同一文件夹里的UTF格式文件批量转为ANSI。
  1. ' *============================================================================*
  2. ' * 批量编码转换包括GB2312,UTF-8,Unicode,支持拖动,可扩展到右菜单(发送到) *
  3. ' * CodeChange.vbs     BY: yongfa365 http://www.yongfa365.com       2007-10-04 *
  4. ' * UTF82ANSI.vbs   BY: fastslz   http://bbs.cn-dos.net          2007-12-03 *
  5. ' *============================================================================*
  6. aCode = "UTF-8"
  7. bCode = "GB2312"
  8. Set objArgs = WScript.Arguments
  9. If objArgs.Count=0 Then
  10.     MsgBox "本脚本仅支持"&aCode&"到"&bCode&"的转换,请将您要转换的文件拖到这个文件上!    "&vbCrLf&"命令行用法:UTF82ANSI.vbs [驱动器][目录][文件名1][文件名2]...", vbInformation, "拖拽批量编码转换工具 BY: fastslz"
  11. End If
  12.     For I = 0 To objArgs.Count - 1
  13.         FileUrl = objArgs(I)
  14.         Call CheckCode (FileUrl)
  15.         Call WriteToFile(FileUrl, ReadFile(FileUrl, aCode), bCode)
  16.     Next
  17. Function ReadFile(FileUrl, CharSet)
  18.     Dim Str
  19.     Set stm = CreateObject("Adodb.Stream")
  20.     stm.Type = 2
  21.     stm.mode = 3
  22.     stm.charset = CharSet
  23.     stm.Open
  24.     stm.loadfromfile FileUrl
  25.     Str = stm.readtext
  26.     stm.Close
  27.     Set stm = Nothing
  28.     ReadFile = Str
  29. End Function

  30. Function WriteToFile (FileUrl, Str, CharSet)
  31.     Set stm = CreateObject("Adodb.Stream")
  32.     stm.Type = 2
  33.     stm.mode = 3
  34.     stm.charset = CharSet
  35.     stm.Open
  36.     stm.WriteText Str
  37.     stm.SaveToFile FileUrl, 2
  38.     stm.flush
  39.     stm.Close
  40.     Set stm = Nothing
  41. End Function

  42. Function CheckCode (FileUrl)
  43.     Dim slz
  44.     set slz = CreateObject("Adodb.Stream")
  45.     slz.Type = 1
  46.     slz.Mode = 3
  47.     slz.Open
  48.     slz.Position = 0
  49.     slz.Loadfromfile FileUrl
  50.     Bin=slz.read(2)
  51.     if AscB(MidB(Bin,1,1))=&HEF and AscB(MidB(Bin,2,1))=&HBB Then
  52.        Codes="UTF-8"
  53.        elseif AscB(MidB(Bin,1,1))=&HFF and AscB(MidB(Bin,2,1))=&HFE Then
  54.               Codes="Unicode"
  55.               else
  56.               Codes="GB2312"
  57.     end if
  58.     if not aCode = Codes Then
  59.            MsgBox "待处理文件 “"&FileUrl&"”"&vbCrLf&"该文件原始编码不是"&aCode&",本脚本仅支持"&aCode&"到"&bCode&"的转换!    ",vbInformation,"错误终止"
  60.            WScript.Quit
  61.     end if
  62.     slz.Close
  63.     set slz = Nothing
  64. End Function
复制代码
发表于 2012-12-1 22:28:28 | 显示全部楼层
回复 6# 每天几分


    到VBS版块发个帖子问问吧
 楼主| 发表于 2012-12-1 22:35:20 | 显示全部楼层
回复 7# Batcher


    好吧,再等等,没人回复的话我再到VBS板块问问……
发表于 2012-12-2 16:00:32 | 显示全部楼层
  1. aCode = "UTF-8"
  2. bCode = "GB2312"
  3. Set FSO = CreateObject("Scripting.FileSystemObject")
  4. For Each FileUrl In FSO.GetFolder(".").Files
  5.    Ext = FSO.GetExtensionName(FileUrl)
  6.    If Lcase(Ext) = "txt" Then
  7.       If CheckCode(FileUrl) Or is_valid_utf8(read(FileUrl)) Then
  8.          Call WriteToFile(FileUrl, ReadFile(FileUrl, aCode), bCode)
  9.       End If
  10.    End If
  11. Next
  12. MsgBox "OK"

  13. Function ReadFile(FileUrl, CharSet)
  14.    Dim Str
  15.    Set stm = CreateObject("Adodb.Stream")
  16.    stm.Type = 2
  17.    stm.mode = 3
  18.    stm.charset = CharSet
  19.    stm.Open
  20.    stm.loadfromfile FileUrl
  21.    Str = stm.readtext
  22.    stm.Close
  23.    Set stm = Nothing
  24.    ReadFile = Str
  25. End Function

  26. Function WriteToFile (FileUrl, Str, CharSet)
  27.    Set stm = CreateObject("Adodb.Stream")
  28.    stm.Type = 2
  29.    stm.mode = 3
  30.    stm.charset = CharSet
  31.    stm.Open
  32.    stm.WriteText Str
  33.    stm.SaveToFile FileUrl, 2
  34.    stm.flush
  35.    stm.Close
  36.    Set stm = Nothing
  37. End Function

  38. Function CheckCode (FileUrl)
  39.    Dim slz
  40.    Set slz = CreateObject("Adodb.Stream")
  41.    slz.Type = 1
  42.    slz.Mode = 3
  43.    slz.Open
  44.    slz.Position = 0
  45.    slz.Loadfromfile FileUrl
  46.    Bin=slz.read(2)
  47.    If AscB(MidB(Bin,1,1))=&HEF and AscB(MidB(Bin,2,1))=&HBB Then
  48.       CheckCode = True
  49.    end if
  50.    slz.Close
  51.    Set slz = Nothing
  52. End Function

  53. Function read(path)
  54.    Dim ado, a(), i, n
  55.    Set ado = CreateObject("ADODB.Stream")
  56.    ado.Type = 1 : ado.Open
  57.    ado.LoadFromFile path
  58.    n = ado.Size - 1
  59.    ReDim a(n)
  60.    For i = 0 To n
  61.       a(i) = ChrW(AscB(ado.Read(1)))
  62.    Next
  63.    read = Join(a, "")
  64. End Function

  65. Function is_valid_utf8(ByRef input) 'ByRef以提高效率
  66.    Dim s, re
  67.    Set re = New Regexp
  68.    s = "[\xC0-\xDF]([^\x80-\xBF]|$)"
  69.    s = s & "|[\xE0-\xEF].{0,1}([^\x80-\xBF]|$)"
  70.    s = s & "|[\xF0-\xF7].{0,2}([^\x80-\xBF]|$)"
  71.    s = s & "|[\xF8-\xFB].{0,3}([^\x80-\xBF]|$)"
  72.    s = s & "|[\xFC-\xFD].{0,4}([^\x80-\xBF]|$)"
  73.    s = s & "|[\xFE-\xFE].{0,5}([^\x80-\xBF]|$)"
  74.    s = s & "|[\x00-\x7F][\x80-\xBF]"
  75.    s = s & "|[\xC0-\xDF].[\x80-\xBF]"
  76.    s = s & "|[\xE0-\xEF]..[\x80-\xBF]"
  77.    s = s & "|[\xF0-\xF7]...[\x80-\xBF]"
  78.    s = s & "|[\xF8-\xFB]....[\x80-\xBF]"
  79.    s = s & "|[\xFC-\xFD].....[\x80-\xBF]"
  80.    s = s & "|[\xFE-\xFE]......[\x80-\xBF]"
  81.    s = s & "|^[\x80-\xBF]"
  82.    re.Pattern = s
  83.    is_valid_utf8 = (Not re.Test(input))
  84. End Function
复制代码
无BOM头的UTF-8文件判断用的是:
http://demon.tw/programming/vbs-validate-utf8.html

评分

参与人数 1技术 +1 收起 理由
每天几分 + 1 多谢!辛苦了!

查看全部评分

发表于 2019-12-17 10:37:44 | 显示全部楼层
本帖最后由 ly88888 于 2019-12-17 11:57 编辑

回复 9# apang


   完美
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 13:31 , Processed in 0.028949 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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