|
ADODB.Streamによる文字コード変換のサンプル(VB6)

|
<このサンプルの概要>
ADODB.Streamを使用しSJIS、JIS、EUC、UTF-7、UTF-8 からVB6内部文字コードであるUNIC
ODE(UTF-16)に変換します。また、UNICODEからの逆変換もします。全ての文字コードをUN
ICODEに変換出来て、その逆変換も出来れば全ての文字コード間の変換がUNICODEを通して
出来る事になります。UNICODEを通す事による処理速度等は気にしていません。
ADODB.Streamを使用するためには、参照設定が必要になります。
「Microsoft AxtiveX Data Objects X.X Library」を追加してお試しください。
このサンプルでは「Microsoft AxtiveX Data Objects 2.5 Library」を使用しています。
ADOで文字コード変換とは、意外でしたが結構簡単に出来ます。
WideCharToMultiByteと MultiByteToWideCharによる文字コード変換ではEUCが変換出来ま
せんでしたが、ADODB.Streamでは変換出来ます。また、ADODB.Streamは品質も良く、今の
ところ文字化けを発見していません。
VB.NET版のサンプルソースもあります。
.NETではADODB.Streamを使う必要が無いと思いますが、
.NETからADODB.Streamを呼び出す勉強として作ってみました。
ADODB.Streamによる文字コード変換のサンプル(VB.NET)
関連情報
WideCharToMultiByteとMultiByteToWideCharによる文字コード変換のサンプル(VB6/VB.NET)
文字コード判定のサンプル(VB6/VB.NET)
文字コード判定&変換ツール.NET
文字コード判定/変換ツール(VB6のソース付)
Option Explicit
'**********************************************************************
' 機能名 : modADOS.bas
' 機能説明 : ADODB.Streamによる文字コード変換
' 備考 :
' 著作権 : Copyright(C) 2007 のん All right reserved
' : このプログラムは、日本国著作権法および国際条約により保護
' : されています。このプログラムを転載する場合は著作権所有者
' : の許可が必要となります。
'**********************************************************************
'---Shift-JIS関係
' 関数名 : ADOS_Encode_SJIS
' 返り値 : SJIS文字データ
' 引き数 : strUni: UNICODE文字データ
' 機能説明 : UNICODE文字データをSJISに変換する
' 備考 : ADODB.Streamによる文字コード変換
Public Function ADOS_Encode_SJIS(ByRef strUni As String) As Byte()
ADOS_Encode_SJIS = ADOS_Encode("Shift_JIS", strUni)
End Function
' 関数名 : ADOS_Decode_SJIS
' 返り値 : UNICODE文字列
' 引き数 : bytIn : SJIS文字データ
' 機能説明 : SJIS文字データをUNICODEに変換する
' 備考 : ADODB.Streamによる文字コード変換
Public Function ADOS_Decode_SJIS(ByRef bytIn() As Byte) As String
ADOS_Decode_SJIS = ADOS_Decode("Shift_JIS", bytIn)
End Function
'---JIS関係
' 関数名 : ADOS_Encode_JIS
' 返り値 : JIS文字データ
' 引き数 : strUni: UNICODE文字データ
' 機能説明 : UNICODE文字データをJISに変換する
' 備考 : ADODB.Streamによる文字コード変換
Public Function ADOS_Encode_JIS(ByRef strUni As String) As Byte()
ADOS_Encode_JIS = ADOS_Encode("ISO-2022-JP", strUni)
End Function
' 関数名 : ADOS_Decode_JIS
' 返り値 : UNICODE文字列
' 引き数 : bytIn : JIS文字データ
' 機能説明 : JIS文字データをUNICODEに変換する
' 備考 : ADODB.Streamによる文字コード変換
Public Function ADOS_Decode_JIS(ByRef bytIn() As Byte) As String
ADOS_Decode_JIS = ADOS_Decode("ISO-2022-JP", bytIn)
End Function
'---EUC関係
' 関数名 : ADOS_Encode_EUC
' 返り値 : EUC文字データ
' 引き数 : strUni: UNICODE文字データ
' 機能説明 : UNICODE文字データをEUCに変換する
' 備考 : ADODB.Streamによる文字コード変換
Public Function ADOS_Encode_EUC(ByRef strUni As String) As Byte()
ADOS_Encode_EUC = ADOS_Encode("EUC-JP", strUni)
End Function
' 関数名 : ADOS_Decode_EUC
' 返り値 : UNICODE文字列
' 引き数 : bytIn : EUC文字データ
' 機能説明 : EUC文字データをUNICODEに変換する
' 備考 : ADODB.Streamによる文字コード変換
Public Function ADOS_Decode_EUC(ByRef bytIn() As Byte) As String
ADOS_Decode_EUC = ADOS_Decode("EUC-JP", bytIn)
End Function
'---UTF-7関係
' 関数名 : ADOS_Encode_UTF7
' 返り値 : UTF7文字データ
' 引き数 : strUni: UNICODE文字データ
' 機能説明 : UNICODE文字データをUTF7に変換する
' 備考 : ADODB.Streamによる文字コード変換
Public Function ADOS_Encode_UTF7(ByRef strUni As String) As Byte()
ADOS_Encode_UTF7 = ADOS_Encode("UTF-7", strUni)
End Function
' 関数名 : ADOS_Decode_UTF7
' 返り値 : UNICODE文字列
' 引き数 : bytIn : UTF7文字データ
' 機能説明 : UTF7文字データをUNICODEに変換する
' 備考 : ADODB.Streamによる文字コード変換
Public Function ADOS_Decode_UTF7(ByRef bytIn() As Byte) As String
ADOS_Decode_UTF7 = ADOS_Decode("UTF-7", bytIn)
End Function
'---UTF-8関係
' 関数名 : ADOS_Encode_UTF8
' 返り値 : UTF8文字データ
' 引き数 : strUni: UNICODE文字データ
' 機能説明 : UNICODE文字データをUTF8に変換する
' 備考 : ADODB.Streamによる文字コード変換
Public Function ADOS_Encode_UTF8(ByRef strUni As String) As Byte()
ADOS_Encode_UTF8 = ADOS_Encode("UTF-8", strUni)
End Function
' 関数名 : ADOS_Decode_UTF8
' 返り値 : UNICODE文字列
' 引き数 : bytIn : UTF8文字データ
' 機能説明 : UTF8文字データをUNICODEに変換する
' 備考 : ADODB.Streamによる文字コード変換
Public Function ADOS_Decode_UTF8(ByRef bytIn() As Byte) As String
ADOS_Decode_UTF8 = ADOS_Decode("UTF-8", bytIn)
End Function
'---共通関数
' 関数名 : ADOS_Encode
' 返り値 : 出力文字データ
' 引き数 : cset : 出力文字データのキャラクタセット名
' : strUni: UNICODE文字データ
' 機能説明 : UNICODE文字データを指定のコードに変換する
' 備考 : ADODB.Streamによる文字コード変換
Private Function ADOS_Encode(ByVal cset As String, ByRef strUni As String) As Byte()
On Error GoTo ErrHandler
Dim objStm As ADODB.Stream
Set objStm = New ADODB.Stream
objStm.Open
objStm.Type = adTypeText
objStm.Charset = cset
objStm.WriteText strUni
objStm.Position = 0
objStm.Type = adTypeBinary
Select Case UCase(cset)
Case "UNICODE", "UTF-16"
objStm.Position = 2
Case "UTF-8"
objStm.Position = 3
End Select
ADOS_Encode = objStm.Read()
objStm.Close
Set objStm = Nothing
Exit Function
ErrHandler:
Debug.Print "文字コード変換エラー:" & Err.Description
If objStm Is Nothing = False Then objStm.Close
Set objStm = Nothing
End Function
' 関数名 : ADOS_Decode
' 返り値 : UNICODE文字列
' 引き数 : cset : 入力文字データのキャラクタセット名
' : bytIn : 入力文字データ
' 機能説明 : 入力文字データをUNICODEに変換する
' 備考 : ADODB.Streamによる文字コード変換
Private Function ADOS_Decode(ByVal cset As String, ByRef bytIn() As Byte) As String
On Error GoTo ErrHandler
Dim objStm As ADODB.Stream
Set objStm = New ADODB.Stream
objStm.Open
objStm.Type = adTypeBinary
objStm.Write bytIn
objStm.Position = 0
objStm.Type = adTypeText
objStm.Charset = cset
ADOS_Decode = objStm.ReadText()
objStm.Close
Set objStm = Nothing
Exit Function
ErrHandler:
Debug.Print "文字コード変換エラー:" & Err.Description
If objStm Is Nothing = False Then objStm.Close
Set objStm = Nothing
End Function