中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-30 11:29
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 命令行GB2312,UTF-8,Unicode,BIG5编码转换工具VBS版(2007-12更新) 查看 17,707 回复 64
楼 主 命令行GB2312,UTF-8,Unicode,BIG5编码转换工具VBS版(2007-12更新) 发表于 2007-12-05 14:41 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
' *==============================================================================*
' * CMD 命令行编码转换工具包括GB2312,UTF-8,Unicode,BIG5...支持拖拽、文件另保存为 *
' * CodeChange.vbs BY: yongfa365 http://www.yongfa365.com 2007-10-04 *
' * GB2Ue.vbs BY: fastslz http://bbs.cn-dos.net 2007-12-03 *
' *==============================================================================*
aCode = "GB2312"
bCode = "Unicode"
Show = "本脚本仅支持"&aCode&"到"&bCode&"的转换,请拖拽单个要转换的文件到此文件上! "
Usage1 = "语法1:GB2Ue.vbs (直接替换原文件模式)"
Usage2 = "语法2:GB2Ue.vbs /Y"
Usage3 = " 如果目标新文件已存在,使用/Y参数后将直接替换而不提示是否改写! "
Usage4 = "命令行编码转换工具 BY: fastslz"

Set objArgs=WScript.Arguments
Set fso=CreateObject("Scripting.FileSystemObject")
if objArgs.Count=0 Then
MsgBox Show &vbCrLf&vbCrLf& Usage1 &vbCrLf& Usage2 &vbCrLf& Usage3, vbInformation, Usage4
Wscript.Quit
end if
if not objArgs.Count < 3 Then
Options="/y"
ignoring = StrComp(objArgs(2), Options, vbTextCompare)
if ignoring = 0 Then
Sourcefile=objArgs(0)
Getfile=objArgs(1)
else
MsgBox "文件数量或参数太多,拖拽批量处理请用 ANSI2Unicode.vbs ", vbInformation, "程序意外终止"
Wscript.Quit
end if
else
if not objArgs.Count < 2 Then
Sourcefile=objArgs(0)
Getfile=objArgs(1)
if fso.FileExists(objArgs(1)) then
Choice = MsgBox ("待处理文件“"+Sourcefile+"” ==> 目标文件“"+Getfile+"” "&vbCrLf&"目标文件已存在,是否改写现有文件?“"+objArgs(1)+"” ",vbQuestion+vbYesNo,"是否改写")
if Choice = vbYes Then
Getfile=objArgs(1)
else
Wscript.Quit
end if
end if
else
Sourcefile=objArgs(0)
Getfile=objArgs(0)
end if
end if

Call CheckCode (Sourcefile)
Call WriteToFile(Getfile, ReadFile(Sourcefile, aCode), bCode)
Wscript.Quit

Function ReadFile (Sourcefile, CharSet)
Dim Str
Set stm = CreateObject("Adodb.Stream")
stm.Type = 2
stm.mode = 3
stm.charset = CharSet
stm.Open
stm.loadfromfile Sourcefile
Str = stm.readtext
stm.Close
Set stm = Nothing
ReadFile = Str
End Function

Function WriteToFile (Getfile, Str, CharSet)
Set stm = CreateObject("Adodb.Stream")
stm.Type = 2
stm.mode = 3
stm.charset = CharSet
stm.Open
stm.WriteText Str
stm.SaveToFile Getfile,2
stm.flush
stm.Close
Set stm = Nothing
End Function

Function CheckCode (Sourcefile)
Dim slz
set slz = CreateObject("Adodb.Stream")
slz.Type = 1
slz.Mode = 3
slz.Open
slz.Position = 0
slz.Loadfromfile Sourcefile
Bin=slz.read(2)
if AscB(MidB(Bin,1,1))=&HEF and AscB(MidB(Bin,2,1))=&HBB Then
Codes="UTF-8"
elseif AscB(MidB(Bin,1,1))=&HFF and AscB(MidB(Bin,2,1))=&HFE Then
Codes="Unicode"
else
Codes="GB2312"
end if
if not aCode = Codes Then
MsgBox "待处理文件 “"&Sourcefile&"”"&vbCrLf&"该文件原始编码不是"&aCode&",本脚本仅支持"&aCode&"到"&bCode&"的转换! ",vbInformation,"错误终止"
WScript.Quit
end if
slz.Close
set slz = Nothing
End Function

演示
echo "ABCDE &!@#$ ^<>() %% abcde 测试!"> "处理前.txt"
GB2Ue.vbs "处理前.txt" "处理后.txt" /y
Ue2U8.vbs "处理后.txt"
U82GB.vbs "处理后.txt"
GB2U8.vbs "处理后.txt"
U82Ue.vbs "处理后.txt"
Ue2GB.vbs "处理后.txt"
@echo 经过6次处理 "处理后.txt" 和 "处理前.txt" 仍旧是相同编码


编码查询工具 QueryCode.vbs
http://www.cn-dos.net/forum/viewthread.php?tid=36012&fpage=1&highlight=

[ Last edited by fastslz on 2007-12-9 at 11:24 PM ]
本帖最近评分记录 (共 6 条) 点击查看详情
评分人分数时间
s11ss +4 2007-12-05 16:36
honghunter +3 2008-01-14 21:38
wert123 +4 2008-03-12 14:01
kioskboy +2 2008-04-12 18:31
bgfcgh +1 2008-11-01 15:35
NeverAgain +2 2010-10-27 17:05
附件
CodeToos.rar (15.19 KiB, 下载附件所需积分 1 点, 下载次数: 461)
第一高手 第二高手

2 发表于 2007-12-05 16:36 ·  中国 北京 电信
银牌会员
★★★
积分 2,098
发帖 566
注册 2007-09-11 07:27
18年会员
UID 97070
性别 男
状态 离线
多谢分享,研究一下。
3 发表于 2007-12-06 14:45 ·  中国 四川 成都 教育网
铂金会员
★★★★
积分 7,493
发帖 2,672
注册 2005-09-02 00:00
20年会员
UID 42173
性别 男
状态 离线
Function WriteToFile (Getfile, Str, CharSet)
Set stm = CreateObject("Adodb.Stream")
stm.Type = 2
stm.mode = 3
stm.charset = CharSet
stm.Open
stm.WriteText Str
stm.SaveToFile Getfile,2
stm.flush
stm.Close
Set stm = Nothing
End Function

果然是这段,嘿嘿~

C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
4 发表于 2007-12-09 23:30 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
更新:
加强应用性,避免用户误操作造成不必要的损失,增加判断输入文件编码是否正确功能。
第一高手 第二高手

5 发表于 2007-12-10 23:03 ·  中国 山东 济南 联通
新手上路
积分 10
发帖 5
注册 2007-11-23 18:08
18年会员
UID 103545
性别 男
状态 离线
高手,水平太高了,以后来这里好好,好多年不碰dos,手生了不少
6 发表于 2007-12-20 16:51 ·  中国 北京 联通
新手上路
积分 2
发帖 1
注册 2007-12-20 16:25
18年会员
UID 106261
性别 男
状态 离线
下载一个试试~~ 找类似的工具好久了~谢谢
7 发表于 2007-12-20 20:01 ·  中国 山西 运城 联通
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
22年会员
UID 19350
性别 男
状态 离线
谁有空写一个纯dos下的版本

这两天尝试在dos下浏览邮件
满篇的mime字符令人发愁
8 发表于 2007-12-23 14:24 ·  中国 北京 朝阳区 联通
初级用户
积分 23
发帖 11
注册 2007-09-18 13:38
18年会员
UID 97692
性别 男
状态 离线
CheckCode 这个函数只能判断带BOM的文件
9 发表于 2007-12-23 18:41 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。

UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。

Windows就是使用BOM来标记文本文件的编码方式的。
第一高手 第二高手

10 发表于 2007-12-23 21:06 ·  中国 北京 朝阳区 联通
初级用户
积分 23
发帖 11
注册 2007-09-18 13:38
18年会员
UID 97692
性别 男
状态 离线
有BOM很多地方会有问题,不喜欢这个BOM
11 发表于 2007-12-24 01:43 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
回9楼时匆忙还不注意原来是柳永法(yongfa365)高手哦,看你的Blog受益匪浅,在你的CodeChange.vbs代码中也学到不少
第一高手 第二高手

12 发表于 2007-12-24 01:47 ·  中国 上海 松江区 电信
铂金会员
★★★★
DOS一根葱
积分 5,493
发帖 2,315
注册 2006-05-01 10:41
20年会员
UID 54766
性别 男
来自 上海
状态 离线
Originally posted by qzwqzw at 2007-12-20 20:01:
谁有空写一个纯dos下的版本

这两天尝试在dos下浏览邮件
满篇的mime字符令人发愁


纯DOS纯CMD的吧?给个思路
第一高手 第二高手

13 发表于 2008-01-16 16:37 ·  中国 浙江 电信
新手上路
积分 14
发帖 7
注册 2007-08-30 12:16
18年会员
UID 96172
性别 男
状态 离线
好东西,我下来了,谢谢分享
14 发表于 2008-02-18 13:43 ·  中国 山东 青岛 联通
新手上路
积分 2
发帖 1
注册 2008-02-18 13:20
18年会员
UID 110888
性别 男
状态 离线
太棒了 真是好东西
15 发表于 2008-03-07 01:43 ·  中国 广东 佛山 三水区 电信
新手上路
积分 14
发帖 7
注册 2007-10-23 08:50
18年会员
UID 100506
性别 男
状态 离线
谢谢。楼主能不能帮我把转换后扩展名同时改htm。因为我的索爱手机能看到UTF-8格式的htm(看书用的)

[ Last edited by 35799 on 2008-3-7 at 01:46 AM ]
论坛跳转: