|
|||||
<このサンプルの概要> 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) もっと簡単に文字コード変換を実現したい場合はこちらのDLLがおすすめです。 文字コード判定/変換DLL(VB6/VB.NET/C#.NET) 関連情報 WideCharToMultiByteとMultiByteToWideCharによる文字コード変換のサンプル(VB6/VB.NET) 文字コード判定のサンプル(VB6/VB.NET) 文字コード判定&変換ツール.NET 文字コード判定/変換ツール(VB6のソース付) Option Explicit '**************************************************************************** ' 機能名 : modADOS.bas ' 機能説明 : ADODB.Streamによる文字コード変換 ' 備考 : ' 著作権 : Copyright(C) 2007 のん All rights reserved ' --------------------------------------------------------------------------- ' 使用条件 : このサイトの内容を使用(流用/改変/転載/等全て)した成果物を不特定 ' : 多数に公開/配布する場合は、このサイトを参考にした旨を記述してく ' : ださい。(例)WEBページやReadMeにリンクを貼ってください ' --------------------------------------------------------------------------- '**************************************************************************** '---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 |