NonSoft

VBSやVBAで文字コードを変換する方法


 ち〜な〜み〜に〜

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