これは、ASP(Active Server Pages) & WSH などで利用できる COM コンポーネントです

多分...


はじめに
最近のネットワークデータ(HTML を代表として) UTF-8 で流れている場合が多く...ご存知のように Windows では内部的に UCS-2 を用いています。VB プログラマから見ると SJIS として見る事も簡単

なので、Windows内部の UNICODE と SJIS(ASCII) 間の変換は VisualBASIC の StrConv() 関数を使えばいいのですが...UTF-8 のデータを変換することが VisualBASIC では大変なんです。

そしたら、WindowsNT 系列では、WideCharToMultiByte()/MultiByteToWideChar() 関数の普通の API として UTF-7/8 の変換をサポートしているという話を聞きましたので、では VisualBASIC でも使用できるように COM ラッパにしてみました。

ついでに UTF-5 も実装してみました(対象は UCS-2 のみですが)。
さらについでに UTF-6 も実装してみました(対象は UCS-2 のみですが{UTF6 自体が UCS2 のみですが})。
さらにさらについでに RACE(Base32 手前) も実装してみました(対象は UCS-2 のみですが{RACE 自体が UCS2 のみですが})。

リンク先の方々のページの方が、詳しいですが、Windows9x 系では動かないようです。

リンク:


変換規則(UTF-7/8)
ソースコードそのまんまですが、入力データ関係以外の引数には、NULL を指定していますので高速です。ってかいい加減に変換される危険性があります。

変換規則(UTF-5/6)
UCS-2(16Bit)固定で、エンコードしています。
適切な UTF-5 でない場合、UCS-2 をベースに UCS-4 でデコードされるかもしれません。

変換規則(RACE)
RACE エンコードは、
  1. RACE 圧縮
  2. BASE32 エンコード
  3. 前置詞「bq--」を付与
という流れであるが、この RACE 圧縮処理だけを実装しているので、RACE エンコードを完成させるには BASE32 処理するモジュールが必要です(たとえばsBase64)

同様に RACE デコードは、
  1. 前置詞「bq--」を削除
  2. BASE32 デコード
  3. RACE 伸張
という流れであるが、この RACE 伸張処理のみを実装しています


ActiveScript(VBScript/VBA) の方へ
コマンド・プロンプトのリダイレクトや Scripting.FileSystemObject など自動で勝手に Unicode 変換して保存するタイプがありますので、外部への出力へは十分な注意が必要です。

返り値も、Variant 型のバイナリで返るので、VisualBASIC ユーザだけに恩恵があるのかも知れない。


使用方法
  1. UTF-7/8 への変換は Windows2000 以降に実装されているそうです。
  2. sCOMmon.dll が必要ですので、ダウンロードして、sCOMmon.dll をシステム・ディレクトリ(%SystemRoot%\System32 {Win64 → %SystemRoot%\SysWOW64})にコピーしてください。
  3. ファイルをダウンロードします。
  4. ダウンロードしたファイルを解凍しします。
    (LHA は、吉崎栄泰氏が、著作権を所有)
  5. sUTF8com.dll を任意のディレクトリにコピー。
  6. コピーされたディレクトリで、regsvr32.exe を実行して sUTF8com.dll をレジストリに登録。
  7. (同梱されている regsvr32.bat を sUTF8com.dll と同一ディレクトリにコピーして実行することでも可能。
  8. 以上で、
    VBScript,JScript,VisualBASIC にて、この COM コンポーネントを利用可能。



使い方(VBScript を例にして...)
基本的には
  1. オブジェクトを生成{CreateObject("sUTF8com.unicode")}
  2. 暗号化、または復号化メソッドの実行{Encrypt() または Decrypt() メソッド}
  3. オブジェクトを解放{Nothing キーワード}

ってな感じです。

ダウンロードしたファイルを解凍すると、sample.vbs というファイルがあると思います。
WSH & VBScript でのサンプルです。


アンインストール方法
RegSvr32 コマンドの /u オプションを用いて、sUTF8com.dll をレジストリから削除するだけです。
必要がないようでしたら、sCOMmon.dll も削除してください。

免責など
著作権は保持します。
しかし、このソフトを使用したことによって生じた、
いかなる損害についても責任は持ちません。
ソースコードについては、各自の責任において、自由にいじってくれてもいいです。

修正についての提案や、バグレポートなどは、メールにて受け付けています。


DownLoad(sUTF8com.lzh as 102,646byte) (sUTF8com.lzh.base64)
sUTF8com.dll is 65,536byte(ver1.0.0.8)


変更履歴



COM(sUTF8com.dll) メソッド一覧


toUTF7(対象データ)
fromUTF7(対象データ)
toUTF8(対象データ)
fromUTF8(対象データ)
toUTF5(対象データ)
fromUTF5(対象データ)
toUTF6(対象データ)
fromUTF6(対象データ) toRACE(対象データ)
fromRACE(対象データ)
toUTF7Ascii(対象データ)
fromUTF7Ascii(対象データ)
toUTF5Ascii(対象データ)
fromUTF5Ascii(対象データ)
toUTF6Ascii(対象データ)
fromUTF6Ascii(対象データ)
内容 UCS-2 のデータ(Windows 内部表現の事を指しているので、VisualBASIC の String 型を引数として指定すればよい)を UTF-8/UTF-7/UTF-5/UTF-6/RACE へ変換してバイナリ型(Variant だけどね)として返す
引数に文字列終端コードがあってもなくても良いが、返り値には、文字列終端コードが付いちゃう
toUTF5/6/7/8() の返り値には、文字列終端コードは付きません(ver1.0.0.3)

toUTF5 変換の対象は、UCS-4 であるが、このコンポーネントは、UTF16(UCS2)(16Bit/2Byte)のみを対象としている。
fromUTF5 変換では、UCS-4 対応している。

toRACE() は Base32 変換直前までの変換を行いますので、toRACE() 関数の結果を Base32 変換し、前置詞「bq--」を付ければ RACE 文字列になります。
fromaRACE() は、Base32 変換以降の処理を実装していますので、RACE 文字列から前置詞「bq--」を取り除き、Base32 デコードを行った結果を fromRACE() 関数に渡すと元の文字列になります

内容 toUTFx() 関数と同義であるが、出力を文字列型(VARIANT だけどね)(外部SJIS,内部UNICODE)として出力する
fromUTFx() 関数と同義であるが、入力データを通常の文字列型(外部SJIS,内部UNICODE)としている
サンプルコード(WSH & VBScript)
Set Obj = WScript.CreateObject("sUTF8com.unicode")
ret = Obj.toUTF8("文字列")
Set Obj = Nothing



mail to active@window.goukaku.com