こんにちは、わたあめです。今日は文字コードを変換するVBScriptのコードサンプルを紹介します。
文字コードを変換する手法としてはいくつかあります。Linuxだとiconvコマンド、またPowershellであれば文字コード変換のコマンドが用意されているみたいです。ただ、Windows10標準のコマンドプロンプトには、文字コードを変換するコマンドがないみたいです。
そこで、今回はVBScriptを作成して、コマンドプロンプトからVBSを実行することにしました。そのVBScriptのサンプルコードを紹介していきたいと思います。それでは、いってみましょう!
文字コード変換するVBScriptサンプル概要
UTF-8をShift-JISに変換するサンプルコードを作成しました。UTF-8のファイルを読み込み、Shift-JISで上書き保存する処理です。ファイルの内容を読み込む入力オブジェクト、入力ファイルの内容をShift-JISで書き込む出力を2つのオブジェクトを使って実現していきます。
コードサンプルと作成・実行方法
サンプルコードは、以下です。コードの解説は次章で行っています。
'============================================
' 文字コードを変換するVBScript
'============================================
'変数定義
Dim objInput,objOutput
Dim file
file = "ファイルパス"
'オブジェクトセット
Set objInput = CreateObject("ADODB.Stream")
Set objOutput = CreateObject("ADODB.Stream")
'1.入力ファイルオブジェクトを開き、ファイルを読み込み(ロード)
objInput.Charset = "UTF-8"
objInput.Open
objInput.LoadFromFile file
'2.入力ファイルの内容を変数に格納
tmpStr = objInput.ReadText
'3.出力ファイルオブジェクトを開き、一時的な文字列変数を書き込み
objOutput.Charset = "Shift_JIS"
objOutput.Open
objOutput.WriteText tmpStr
'入力ファイルオブジェクトを閉じる
objInput.Close
'4.上書き
objOutput.SaveTofile file , 2
'出力ファイルオブジェクトを閉じる
objOutput.Close
[file = "ファイルパス"]の部分には、実際に処理をしたいファイルパスを指定してくださいね。例えば、Cドライブ直下のtest.txtというファイルを処理するのであれば、以下のような書きっぷりとなります。
作成したvbsは、vbsをダブルクリックすれば実行できます。
コード解説
サンプルコードの大まかな解説を行います。コードの中に記載したコメント文の通り、流れは以下です。
- 入力ファイル用オブジェクト(objInput)を開き、ファイルを読み込みます
- 入力ファイル用オブジェクト(objInput)で読み込んだ内容ををtmpStr変数に一時的に格納します
- 出力ファイル用オブジェクト(objOutput)にtmpStrの内容を書き込みます
- ファイルを上書きします
オブジェクトobjInputは、文字コードをUTF-8にセットして開いたものです。オブジェクトobjOutputは、文字コードShift-JISをセットして開いたものです。なので、UTF-8の文字列を読み込んで、書き込みするときはShift-JISの文字列になっているという訳です。
コード改造アレンジするには?
今回のサンプルコードは、UTF-8をShift-JISに変更するというものでしたが、違う文字コードの時はどうすればいいのかも記載しておきます。
文字コードの指定は、オブジェクトをOpenする前の以下の文で行っています。
変換前の文字コードを「objInput.Charset = "文字コード"」で指定し、変換したい文字コードを「objOutput.Charset = "文字コード"」の部分で指定してください。
その他注意事項
今回は文字コード変換部分の処理のみ記載で、細かい改行コードやBOMの有無の処理など入れていません。細かいところは必要に応じて調整ください。
さいごに
最後までお読みいただき、ありがとうございました。少しでもマクロの作成のお役に立てていれば幸いです。それでは、また!