4

エンコーディングを 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
4

1 に答える 1

11

残念ながら、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
于 2013-04-09T17:10:38.860 に答える