SQLの窓

2019年03月07日


VBScript : 複数テキストファイルの charset(キャラクタセット) 一括変換 / ADODB.Stream

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 charset VBS
posted by lightbox at 2019-03-07 14:51 | VBS + オブジェクト | このブログの読者になる | 更新情報をチェックする
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり