[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

本帖最后由 每天几分 于 2012-12-2 17:31 编辑

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

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 2# Batcher


    不太懂……

TOP

回复 3# 每天几分


    多看几遍
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 4# Batcher


    好吧……

TOP

回复 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
复制代码

TOP

回复 6# 每天几分


    到VBS版块发个帖子问问吧
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 7# Batcher


    好吧,再等等,没人回复的话我再到VBS板块问问……

TOP

  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

评分人数

TOP

本帖最后由 ly88888 于 2019-12-17 11:57 编辑

回复 9# apang


   完美

TOP

返回列表