我在文件夹中有一堆文本文件需要将编码更改为Unicode,而不是手动打开文件并将其保存为Unicode我希望有一个脚本来执行此操作。
这些文件目前采用UTF-8编码,我极其有限的脚本编写能力无法解决这个问题。我发现下面的代码从ANSI转换为Unicode,当我使用这个代码时,它确实将它转换为Unicode,但它会弄乱字符,因此转换实际上不起作用。有什么想法吗?提前谢谢。
Set fso = CreateObject("Scripting.FileSystemObject")
Set oFolder = fso.GetFolder("C:\test")
Set oFiles = oFolder.files
For each file in oFiles
If Right(file.Name, 3) = "txt" Then
Set ANSIFile = fso.OpenTextFile(file.path, 1, False, False)
ANSIContent = ANSIFile.ReadAll
Set UNICODEFile = fso.OpenTextFile(file.path, 2, False, True)
UNICODEFile.Write ANSIContent
End If
Next
答案 0 :(得分:9)
不幸的是,VBScript本身并不支持这种转换。但是,您可以使用ADODB.Stream
对象:
Set stream = CreateObject("ADODB.Stream")
stream.Open
stream.Type = 2 'text
stream.Charset = "utf-8"
stream.LoadFromFile "C:\input.txt"
text = stream.ReadText
stream.Close
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile("C:\output.txt", 2, True, True)
f.Write text
f.Close
或者更精简:
Set fso = CreateObject("Scripting.FileSystemObject")
Set stream = CreateObject("ADODB.Stream")
stream.Open
stream.Type = 2 'text
stream.Charset = "utf-8"
stream.LoadFromFile "C:\input.txt"
fso.OpenTextFile("C:\output.txt", 2, True, True).Write stream.ReadText
stream.Close
如果要替换现有文件,则必须使用第一个版本,并使用相同的文件进行输入和输出。使用这样的循环迭代文件夹中的所有文件:
Set fso = CreateObject("Scripting.FileSystemObject")
Set stream = CreateObject("ADODB.Stream")
For Each f In fso.GetFolder("C:\source\folder").Files
stream.Open
stream.Type = 2 'text
stream.Charset = "utf-8"
stream.LoadFromFile f.Path
text = stream.ReadText
stream.Close
fso.OpenTextFile(f.Path, 2, True, True).Write text
Next
答案 1 :(得分:0)
我能够使用此代码转换UTF-8文件。但是:
1)在新生成的Unicode文件的开头有一个(FF FE)序列。我必须删除第一行的前两个字符,使我的旧代码再次工作。
2)对于像我这样的傻瓜,将“Dim”语句与代码一起使用并不奢侈。我总是使用Option Compare Database / Option Explicit。如果他们想念这会让我头疼。 :-)