|
|||||
VBS(VB SCRIPT/WSH)やVBAで手軽に文字コードを変換する方法をご紹介します。 ご紹介する方法は文字コード判定/変換DLL(VB6/VB.NET/C#.NET)を使用する方法です。 このDLLを使うとあっと言う間に文字コード変換が出来ます。 どんなファイルを文字コード変換するか等の応用はお任せします。 このDLLは元々VB6対応なのでVBSでも使用出来ると思っていましたが、 文字コード変換関数等の引数や戻り値が配列だとVBSからは使用出来ないようで、、、 Ver1.0.0.2からVariantで引数や戻り値をやりとりするクラスを追加しました。 とりあえず、VBSの文字コード変換サンプルソースを見てください。 (注意) 64bit(x64)版のWINDOWSで標準のVB SCRIPTを実行するとCreateObjectでエラーが発生するため、 32bit(x86)版のVB SCRIPT(C:\Windows\SysWow64\cscript.exe)を実行してください。 文字コード変換関係のその他のサンプルソースはこちらです。 ADODB.Streamによる文字コード変換のサンプル(VB6/VB.NET) WideCharToMultiByteとMultiByteToWideCharによる文字コード変換のサンプル(VB6/VB.NET) 文字コード判定のサンプル(VB6/VB.NET) また、文字コード変換関係のツールをダウンロード頂けます。 文字コード変換/文字コード判定(ツール&サンプル) 文字コード判定/変換ツール(VB6のソース付) 文字コード判定&変換ツール.NET ファイル一覧表示して文字コード変換出来るツール フォルダ内のファイル比較ツール ★文字コード変換サンプルソース ' ------------------------------------------------ ' 事前にNonCodeVb6.dllをレジストリ登録してください ' レジストリ登録方法:regsvr32 NonCodeVb6.dll ' ------------------------------------------------ ' 文字コード判定/変換AP呼び出し TextCodeChg "TestUtf8.txt", "TestOut1.txt", "SJIS" TextCodeChg "TestUtf8.txt", "TestOut2.txt", "JIS" TextCodeChg "TestUtf8.txt", "TestOut3.txt", "EUC" TextCodeChg "TestUtf8.txt", "TestOut4.txt", "UNICODE" TextCodeChg "TestUtf8.txt", "TestOut5.txt", "UTF7" TextCodeChg "TestUtf8.txt", "TestOut6.txt", "UTF8" MsgBox "終了" ' 文字コード判定/変換AP Private Sub TextCodeChg(Byval ipath, Byval opath, Byval ocode) ' NonCodeVb6.dllのオブジェクト生成 Set objNonCode = CreateObject("NonCodeVb6.NonCodeClassV") ' テキストをバイト配列で読込 Set objADOS = CreateObject("ADODB.Stream") objADOS.Type = 1 objADOS.Open objADOS.LoadFromFile ipath objADOS.Position = 0 idat = objADOS.Read() objADOS.Close ' 文字コード判定(blnBin=バイナリ判定無し) blnBin = False icode = objNonCode.GetCodeName(idat, blnBin) ' 判定した文字コードをString(UNICODE)に変換 Dim uni Select Case icode Case "SJIS" ' SJISからUNICODEへの変換 uni = objNonCode.SJIS_To_VbUnicode(idat) Case "JIS" ' JISからUNICODEへの変換 uni = objNonCode.JIS_To_VbUnicode(idat) Case "EUC" ' EUCからUNICODEへの変換 uni = objNonCode.EUC_To_VbUnicode(idat) Case "UNICODE" ' UNICODEからUNICODEへの変換 uni = objNonCode.UNICODE_To_VbUnicode(idat) Case "UTF7" ' UTF-7からUNICODEへの変換 uni = objNonCode.UTF7_To_VbUnicode(idat) Case "UTF8" ' UTF-8からUNICODEへの変換 uni = objNonCode.UTF8_To_VbUnicode(idat) Case "BIN" ' SJISからUNICODEへの変換 uni = objNonCode.SJIS_To_VbUnicode(idat) Case Else ' SJISからUNICODEへの変換 uni = objNonCode.SJIS_To_VbUnicode(idat) End Select ' String(UNICODE)を出力したい文字コードのByte配列に変換 Dim odat Select Case ocode Case "SJIS" ' UNICODEからSJISへの変換 odat = objNonCode.VbUnicode_To_SJIS(uni) Case "JIS" ' UNICODEからJISへの変換 odat = objNonCode.VbUnicode_To_JIS(uni) Case "EUC" ' UNICODEからEUCへの変換 odat = objNonCode.VbUnicode_To_EUC(uni) Case "UNICODE" ' UNICODEからUNICODEへの変換 odat = objNonCode.VbUnicode_To_UNICODE(uni) Case "UTF7" ' UNICODEからUTF7への変換 odat = objNonCode.VbUnicode_To_UTF7(uni) Case "UTF8" ' UNICODEからUTF8への変換 odat = objNonCode.VbUnicode_To_UTF8(uni) Case Else ' UNICODEからSJISへの変換 odat = objNonCode.VbUnicode_To_SJIS(uni) End Select ' 出力ファイルをバイナリ形式で出力 objADOS.Type = 1 objADOS.Open objADOS.Write odat objADOS.SaveToFile opath, 2 objADOS.Close End Sub |