ADODB.Stream を使用すると、テキストファイルのキャラクタセットををメモリ内で変換する事ができます ※ 変換元と変換後のキャラクタセットを指定する必要があります ※ ここでの対象ディレクトリはカレントにある "res" ディレクトリです ※ SaveToFile オプションの 2 は 上書きを意味します utf8(BOMあり) または utf8n より shift_jis
'**************************************** ' utf8(BOMあり) または utf8n より shift_jis '**************************************** Set Fso = CreateObject( "Scripting.FileSystemObject" ) Set Stream1 = CreateObject("ADODB.Stream") Set Stream2 = CreateObject("ADODB.Stream") Set objFolder = Fso.GetFolder( "res" ) Set objFiles = objFolder.Files For each objFile in objFiles ' フルパス strFullPath = Fso.GetAbsolutePathName( "res\" & objFile.Name ) ' utf-8 として開く( utf8 でも utf8n でも OK ) Stream1.Open Stream1.Type = 2 ' StreamTypeEnum の adTypeText(デフォルト) Stream1.Charset = "utf-8" ' utf-8 として読み込む Stream1.LoadFromFile strFullPath ' shift_jis として開く Stream2.Open Stream2.Type = 2 Stream2.Charset = "shift_jis" ' utf-8 から shift_jis に変換コピーする Stream1.CopyTo Stream2 Stream2.SaveToFile strFullPath, 2 ' 上書き保存 ' ストリームを閉じる Stream2.Close Stream1.Close Next MsgBox("処理が終了しました")
shift_jis から utf8( BOMあり )
'**************************************** ' shift_jis から utf8( BOMあり ) '**************************************** Set Fso = CreateObject( "Scripting.FileSystemObject" ) Set Stream1 = CreateObject("ADODB.Stream") Set Stream2 = CreateObject("ADODB.Stream") Set objFolder = Fso.GetFolder( "res" ) Set objFiles = objFolder.Files For each objFile in objFiles ' フルパス strFullPath = Fso.GetAbsolutePathName( "res\" & objFile.Name ) ' shift_jis として開く Stream1.Open Stream1.Type = 2 ' StreamTypeEnum の adTypeText(デフォルト) Stream1.Charset = "shift_jis" ' shift_jis として読み込む Stream1.LoadFromFile strFullPath ' utf-8 として開く Stream2.Open Stream2.Type = 2 Stream2.Charset = "utf-8" ' shift_jis から utf-8 に変換コピーする Stream1.CopyTo Stream2 Stream2.SaveToFile strFullPath, 2 ' 上書き保存 ' ストリームを閉じる Stream2.Close Stream1.Close Next MsgBox("処理が終了しました")
shift_jis から utf8n( BOMなし ) BOM ありは作成できるので、バイナリモードを使用して先頭3バイトを取り去る処理を追加しています
'**************************************** ' shift_jis から utf8n( BOMなし ) '**************************************** Set Fso = CreateObject( "Scripting.FileSystemObject" ) Set Stream1 = CreateObject("ADODB.Stream") Set Stream2 = CreateObject("ADODB.Stream") Set Stream3 = CreateObject("ADODB.Stream") Set objFolder = Fso.GetFolder( "res" ) Set objFiles = objFolder.Files For each objFile in objFiles ' フルパス strFullPath = Fso.GetAbsolutePathName( "res\" & objFile.Name ) ' shift_jis として開く Stream1.Open Stream1.Type = 2 ' StreamTypeEnum の adTypeText(デフォルト) Stream1.Charset = "shift_jis" ' shift_jis として読み込む Stream1.LoadFromFile strFullPath ' utf-8 として開く Stream2.Open Stream2.Type = 2 Stream2.Charset = "utf-8" ' shift_jis から utf-8 に変換コピーする Stream1.CopyTo Stream2 ' ストリームを閉じる Stream1.Close ' 開始位置を先頭にして、バイナリの扱いに変更 Stream2.Position = 0 Stream2.Type = 1 ' BOM なしをコピーするバイナリストリーム Stream3.Open Stream3.Type = 1 ' 先頭3バイトを読み飛ばし Stream2.Read(3) ' 先頭3バイトを省いてコピー Stream2.CopyTo Stream3 ' UTF8N で保存 Stream3.SaveToFile strFullPath, 2 ' 上書き保存 ' ストリームを閉じる Stream3.Close Stream2.Close Next MsgBox("処理が終了しました")
Stream オブジェクト Type プロパティ
VBScriptドキュメント
|
【VBS + オブジェクトの最新記事】
- 簡易詳細設計書(A4)作成 : VBScript + Excel.Application
- VBScript : 既存の Excel を PDF に変換する ( ExportAsFixedFormat )
- テーブル設計書作成 : VBScript + Excel.Application + SQLServer
- VBScript : Excel.Application でファイルを複数選択する
- ブラウザ上にあるデータを PHP で受け取って、VBScript のコードを作成して事前に作成済のテンプレート Excel にデータをロードして印刷で使用する
- VBScript : Access のテーブルを TransferText メソッドを使用して UTF-8 で CSV または HTML にして出力する
- VBScript : ネイティブ(CAPICOM.Utilities) Base64 エンコード
- VBScript で、スクリプト(Windows Script Component)をオブジェクトとして直接使う方法
- VBScript : バイナリファイルの更新( 1バイトの ByteArray なら、ADO.Stream で作成できます )
- VBScript : ini ファイルの値を取得する
- VBS : My Documents フォルダのような、特殊フォルダのサイズを取得する
- VBScript : ネイティブ SHA1、MD5、SHA256 変換
【VBScript関連のカテゴリ】