WSHでUTF-8をなんとかする
ものすごく久しぶりのEntryなのにWSHっていうのはどうかと思うのですが、意外と時間がかかったのでメモしておく。
そもそもは、Web.configのDB接続文字列を手軽に書き換えたいというただそれだけだったんだけどなあ。
まあまあ、細かいエラー処理とか、お作法とかそういうのはどうでもよいので気にせずゆこう
ポイントは
- ADODB.Streamを使うこと
- ファイルを一旦streamに読み込むこと
- streamからファイル出力すること
<?xml version="1.0" encoding="Shift_JIS" standalone="yes" ?> <package> <job id="changeconfig"> <?job error="true" debug="true" ?> <script language="VBScript"> <![CDATA[ Main() Sub Main() '■ファイル名の設定 Dim inputFileName Dim outputFileName inputFileName = WScript.Arguments(0) outputFileName = WScript.Arguments(1) '■入力ストリームの生成・設定(テキスト、UTF-8) Const streamType = 2 '[1:バイナリデータ 2:テキストデータ] Const streamCharset = "UTF-8" Dim inStream Set inStream = CreateObject("ADODB.Stream") inStream.type = streamType inStream.charset = streamCharset inStream.open inStream.LoadFromFile inputFileName '■出力ストリームの生成・設定(テキスト、UTF-8) Dim outStream Set outStream =CreateObject("ADODB.Stream") outStream.type = streamType outStream.charset = streamCharset outStream.open '■入力ファイルから一行ずつ読み出して、出力ストリームへ書き出す Const readType = -2 '[-1:全部読み込む -2:一行読み込む] Const writerType = 1 '[0:文字列のみ書き込む 1:文字列+改行を書き込む] Dim records Do While inStream.EOS = False '読み出し records = inStream.ReadText(readType) '出力ストリームへ書き出す outStream.WriteText ChangeValue(records), writerType Loop '■出力ファイル生成 Const outputType = 2 '[1:ファイルがない場合はファイル作成 2:ファイルがある場合は上書き] outStream.SaveToFile outputFileName, outputType '■ストリームを閉じてObjectを解放 inStream.Close outStream.Close Set inStream = Nothing Set outStream = Nothing MsgBox "Web.configの書き換えを終えました。" End Sub Function ChangeValue(beforeValue) Const DataSource="SERVER\MAINDB" Const NewDataSource="localhost\SQLEXPRESS" Dim newStr newStr=Replace(beforeValue, DataSource, NewDataSource) ChangeValue = newStr End Function ]]> </script> </job> </package>