UTF-8 URL Encode

久しぶりにExcelをさわる。といっても表計算で使うことはほぼない。その中のBasic部分(いわゆるVBA)だけである。簡単にUTF-8URLエンコードができるものが急に必要になった。Perl/PHPで作ったものはあるが、それはすべてEUC-JPでのURLエンコードである。今これを作り直すとすると相当の時間がかかる(だろう)。何か方法がないものかと探していたら、確か大昔(10年以上前)に作ったWriteUTF8.frmというのがあるのを思い出した。そのBOM付加部分やファイル書き込み部分をカットして(昔のものの再利用/いわゆる換骨奪胎)、単純にURLエンコードだけに特化して作り直せば30分もあればできるだろう。

予想通りこれは数分でできたが、今度は思いがけない「伏兵」が出てきた。URLエンコードの結果が簡単にコピペできないのである。

1
TextBoxのデフォルト1)では左の赤丸の部分をクリックする全データが選択状態(青色反転)になる。
これをクリップボードにコピーして、URLエンコードが必要な部分にペースト(貼り付け)していけばいいわけである(いわゆるコピペ)。
NOTES
1) SelectionMargin = True である。


2
しかし、UTF-8URLエンコードでは結果が1行に収まることは少ない。
それで複数行のTextBoxにすることになるが、今度は赤丸部分をクリックしても、実行結果の全データが選択できない。
手動でマウスで最初から最後まで反転させて選択状態にできるが、これは面倒である。


3
そこで、長いデータでもワンタッチでコピペできるようにする必要がある。
これで一応は完成した。
「エンコードデータをクリップボードにコピー」ボタンを押して、必要な位置に貼り付ければいいわけである。


こういう必要でも起こらなければExcelなどはほとんど使わない。となると、モノ忘れしやすくなるのは自然の理である。用はなくても定期的にあちこちさわっているのが「モノ忘れ」防止と「勘」の養成にいいのかもしれない。この程度のことに時間がかかってモタついたのはひとえに「勘」の欠如であろう(推測)。

ちなみに、このネタに使ったWriteUTF8.frmにはEncodeUTF8というFunctionがあるが、これは相当古い時代に作ったものらしい。
従来の EncodeUTF8次のようなものだった。
Public Function EncodeUTF8 ( ByRef nData As Integer ) As Byte()
- ipc_0069_a1.html -
この関数なら、HelperUTF8.bas内にあるKanjiUTF8で置き換えられるはずだが、WriteUTF8.frmにあったものは次のようなものだった。
Public Function EncodeUTF8 ( ByRef nData As Integer) As String()
私の思っていた「従来の」ものよりはるかに昔のものである(笑)。まったく別物に近い。その他にはBin2Hex関数1)HelperUTF8.bas内のものとは異なっていた。これらの部分を作り変えるとなるとまた時間がかかる。今はこのまま使うことにしよう。関数名がバッティングするのを避けるため、当面はPublicPrivateに変更して、本格的な修正はまたの機会にしよう(こういう修正は実際には作り直しになることが多い)。
NOTES
1) ConvHexBin.bas内にあるBin2HexEx関数と同じである。

なお、これとは逆の動作をする「UTF-8の16進文字列のデコード」についてはipc_0079で既に書いたことがある。

ツール
Selector.frm@Tools.xlsm
とりあえず、このUTF-8 URL Encode Toolは必要にせまられて作ったものなので簡単に呼び出せるようにしておこう。


- 2019/12/19 -





UTF-8 URL エンコード(ipc_0176)
Shift_JIS URL エンコード[1](ipc_0177)
Shift_JIS URL エンコード[2](ipc_0178)


Utf8UrlEncode.bas(vba_0120)
UrlEncodeUtf8.frm@Tools.xlsm(exc_0139)





Unicode,UTF-8,UTF-16,Big,Little,Endian,LE,BE,Shift_JIS,SJIS,CR,LF,CRLF,byte,bit,word,CSV,BOM,Encode,Decode,ANSI, Binary,Open,Byte,Get,Put,Input,InputB,Asc,AscB,AscW,Chr,ChrB,ChrW,Hex,Mod,EOF,LOF,Loc,FreeFile,ReDim,Encoding, Left,LeftB,Right,RightB,Mid,MidB,Len,LenB,InStr,InStrB,FileSystemObject,FSO,CreateTextFile,OpenTextFile,Line Input #, バイナリ,テキスト,文字列,文字コード,16進コード,16進文字列,変換,ビッグ,リトル,エンディアン,ユニコード,改行,サンプル, バイト,ビット,ヘキサ,2進数,16進数,読み込み,書き込み,エンコード,デコード,解析,変換,判定,判別,バイナリエディタ, 全角,半角,カタカナ,ひらがな,漢字,