这篇文章上次修改于 302 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

最近处理一些高品质的日语专辑时碰到了不少乱码的文件, 其实是打开方式不对. 解决乱码要么把系统和时区等切到日文 (这样中文又会乱码但对软件也有效) 要么修改文件编码.

冲浪有一会了发现还是没找到我想要的东西, 于是拿出了半年没登的账号把当初用的 VBS 脚本给下回来了. 使用方法就是把文本文件拖动到脚本上, 然后就会生成一个 文件名_uni.xxx 的没有乱码的文件.

复制以下代码为 xxx.vbs 即可, 因为这玩意不支持 UTF-8 只能显示 GBK 编码下的中文, 索性改成英文.

If WScript.Arguments.Count<1 Then

MsgBox "Please drag the text file to the script to run"

WScript.Quit

End If

'Store arguments (list of files) into class

Set Files = WScript.Arguments

Function gTs(FilePath1,FilePath2,charset1,charset2)

dim str

str = ""

Set adostream = CreateObject("ADODB.Stream")

With adostream

.Type = 2

.Open

.Charset = charset1

.Position = 0

.LoadFromFile FilePath1

str = .readtext

.close

End With

Set adostream = Nothing

Set adostream = CreateObject("ADODB.Stream")

With adostream

.Type = 2

.Open

.Charset = charset2

.Position = 0

.writetext str

.SaveToFile FilePath2, 2

.flush

.close

End With

Set adostream = Nothing

End Function

set fso=createobject("scripting.filesystemobject")

for i = 0 to Files.Count-1

set file = fso.getFile(Files(i))

'intercept file name

str = Left(Files(i),InStrRev(Files(i),".")-1)

newfname = replace(Files(i),str,str & "_uni")

gTs file,newfname,"Shift-JIS","Unicode"

next

set fso=nothing

msgbox "Complete" & Files.Count & "pieces"

WScript.Quit

看代码可以发现, 其实也就是把文件编码从 Shift-JIS 改成了 Unicode, 至于软件乱码就没这么简单了.

Unicode 为 UTF-16, 还可以改成 UTF-8.
把前一个编码换成 GBK 再把输出文件名的 _uni 后缀去掉就是一个完美的覆盖另存为脚本啦 (原文件记得先存档