标题: [文本处理] 批处理替换字符时,中文乱码怎么办 [打印本页]
作者: cktest0001 时间: 2013-9-30 12:26 标题: 批处理替换字符时,中文乱码怎么办
刚才求得了批处理的方法,非常感谢大家。原帖地址:http://www.bathome.net/thread-26646-1-1.html
这里再把需求重复一遍:
有一个文件叫 替换内容集.txt ,里面的内容是:
苹果,apple
橘子,orange
香蕉,banana
……
有一个文件夹,下面有很多文件,也有子文件夹,子子文件夹。
现在要遍历这个文件夹下面的所有文件(包括子文件夹中的),将文件中的苹果、橘子、香蕉等等,替换成apple、orange、…………
上面这个需求已经写好了。现在遇到的问题是,如果替换内容是英文,那没问题,如果是中文,就乱码了
三种文件都是"以 UTF-8 无 BOM 格式编码"。
求大神帮忙。
作者: cktest0001 时间: 2013-9-30 12:28
替换之后,英文正常,中文变乱码
作者: DAIC 时间: 2013-9-30 13:32
先把文件编码转换成ANSI
作者: cktest0001 时间: 2013-9-30 13:41
回复 3# DAIC
不行啊,一转换,目标文件里的中文全变乱码了。
作者: cktest0001 时间: 2013-9-30 13:59
没人知道么? :'( :'( :'(
作者: cktest0001 时间: 2013-9-30 14:16
紧急求助呐~~~一万多个文件呢,不可能手动一个个去改编码格式啊
作者: cktest0001 时间: 2013-9-30 14:55
难道真的没法处理uft-8 ??
作者: cktest0001 时间: 2013-9-30 15:44
再顶顶,实在是没辙了!!!
作者: DAIC 时间: 2013-9-30 16:18
回复 4# cktest0001
你是如何转换的?
你使用的是英文系统吗?
作者: DAIC 时间: 2013-9-30 16:18
回复 6# cktest0001
可以用脚本来批量转换
http://www.bathome.net/thread-3900-1-1.html
作者: cktest0001 时间: 2013-9-30 16:27
回复 10# DAIC
我的文件都是"以 UTF-8 无 BOM 格式编码"这个格式的,用你的会有异常呐~~
作者: cktest0001 时间: 2013-9-30 16:29
回复 9# DAIC
windows8,中文系统。
文件没有做转换,也不能转换,一万多个呢。
现在的问题就是执行上面的脚本无法替换,因为文件的编码不一样,字符匹配不上。
作者: DAIC 时间: 2013-9-30 16:45
回复 11# cktest0001
你用的哪个代码?U82GB.vbs是这个吗?报错信息是什么?
作者: DAIC 时间: 2013-9-30 16:50
回复 12# cktest0001
如果10楼的U82GB.vbs不行,那就试试这个:
http://www.bathome.net/viewthread.php?tid=10300#pid66972
只要能找到合适你的转换脚本,别说一万个了,就是十万个也能很快搞定。
作者: cktest0001 时间: 2013-9-30 16:58
回复 14# DAIC
谢谢,我还决定放弃windows了,去Linux下用shell算了。
作者: DAIC 时间: 2013-9-30 17:23
回复 15# cktest0001
喜闻乐见!有Linux多方便啊,到Windows下面瞎折腾啥。
作者: PowerShell 时间: 2013-9-30 18:37
powershell交流宗宗主,我来也~~
谁敢说linux强win不行?尤其是说win8不行?!滚粗~~~~
详细说出你的需求,我来给你写脚本。
作者: PowerShell 时间: 2013-9-30 20:09
http://www.bathome.net/thread-25683-1-3.html powershell中有世界上最好的编码处理技术
作者: cktest0001 时间: 2013-9-30 23:08
回复 17# PowerShell
版主能解决我这个贴里的问题不?
代码和需求都已经写在一楼了。
遇到的问题就是编码不一致,目标文件是“以 UTF-8 无 BOM 格式编码”,并且有一万多个。
用一楼的bat脚本替换后,中文变成了乱码。。。。
作者: apang 时间: 2013-10-1 10:42
本帖最后由 apang 于 2013-10-1 21:26 编辑
保存为test.vbs,与"替换内容集.txt"存放在同一位置(替换内容集.txt必须是ansi编码),试试- On Error Resume Next
- SrcDir = Left(WScript.ScriptFullName,InstrRev(WScript.ScriptFullName,"\")-1)
- ListFile = SrcDir & "\替换内容集.txt"
- Set fso = CreateObject("Scripting.FileSystemObject")
- Set objFile = fso.OpenTextFile(ListFile,1)
-
- Do Until objFile.AtEndofStream
- strLine = objFile.ReadLine
- If InStr(strLine,",") Then
- ReDim PreServe ar(1,i)
- ar(0,i)=Split(strLine,",")(0) : ar(1,i)=Split(strLine,",")(1)
- i = i + 1
- End If
- Loop
-
- GetSubFolder SrcDir
-
- Sub GetSubFolder(SubFolder)
- For Each file in fso.GetFolder(SubFolder).Files
- If LCase(Right(file,4)) = ".txt" Then
- If Not LCase(file) = LCase(ListFile) Then
- WriteToFile file,"UTF-8"
- End If
- End If
- Next
- For Each folder in fso.GetFolder(SubFolder).SubFolders
- GetSubFolder folder
- Next
- End Sub
-
- Sub WriteToFile(file,CharSet)
- With CreateObject("Adodb.Stream")
- .Type = 2
- .Mode = 3
- .CharSet = CharSet
- .Open
- .LoadFromFile file
- text = .Readtext
- For j = 0 to i - 1
- text = RePlace(text,ar(0,j),ar(1,j))
- Next
- .Position = 0
- .CharSet = CharSet
- .WriteText text
- .SetEOS
- .SaveToFile file,2
- .Close
- End With
- End Sub
复制代码
受刺激了,还是改一下。。。
作者: PowerShell 时间: 2013-10-1 18:49
1 由于你没有提供测试文件,所以也没法测试,总之这是试用版,搞坏你数据概不负责,你自己做好备份。(脚本我简单跑了下,没啥问题)
2 for坛友cktest00012.ps1 下载。ps1 脚本,并把前面的变量改成你真实的环境,保存。
3 管理员cmd运行下列命令:
rem 用管理员权限的cmd命令行中,运行下列命令,开启powershell的.ps1脚本运行权限:
"C:\WINDOWS\system32\windowspowershell\v1.0\powershell.exe" -command "Set-ExecutionPolicy -ExecutionPolicy bypass"
"C:\WINDOWS\syswow64\windowspowershell\v1.0\powershell.exe" -command "Set-ExecutionPolicy -ExecutionPolicy bypass"
4 开启powershell。exe ,打入 cd 你脚本保存的目录。然后打for,然后按tab,即可出现 for坛友cktest00012.ps1 敲回车即可。
5 我想说这题很难,难在性能,理由如下:
5.1 很明显打开一个文件,然后遍历【替换内容集】中的条目,然后替换,性能高。而对一对替换内容,遍历文件,性能低。
5.2 我不知道bat sed等能否一次【在内存中!】替换多个内容。如果不能,就是替换一次,保存一遍,虽然有操作系统缓存会加快很多速度。但也不如直接在内存中遍历替换内容集性能高。尤其是【替换内容集】中的条目比较多的时候。
5.3 我这个脚本很明确是在内存中操作。尤其是【替换内容集】中的条目比较多的时候。我认为我的脚本性能最好,而且我这脚本还能性能优化。欢迎脚本pk呀。
6 过节了,总要休息,甚至杂事纷呈,没空泡坛子了,回复不及时莫怪。
作者: Hello123World 时间: 2021-12-7 11:45
回复 4# cktest0001
下载软件Notepad++,打开Notepad++,编码-转为ANSI编码
作者: WHY 时间: 2021-12-7 22:42
我认为我的脚本性能最好,而且我这脚本还能性能优化。欢迎脚本pk呀。
我也认为我的脚本天下第一。问:天下第一的脚本长啥样?答:天热蚊子多,我想想先。
相声 小品 魔术杂技
评书 笑话 说唱艺术
东西南北中
君请看 曲苑杂坛
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |