Windowsの内部コードはUnicodeである。Excelでも、バージョンが 5 から 95 になった際に内部コードが Shift-JIS から Unicode になったため、Len 関数と LenB 関数の差で全角文字の数を調べたりするような処理ができなくなった。

つまり、全角も半角も、Len は 文字数、LenB は文字数の倍を返すようになった。つまり、全角も半角も2バイトなのだ。

 

で、Unicode イコール 2バイトなんだ、という頭で居たが、それは間違いであった。というのも、Unicodeと言っても UTF-8, UTF-16 など、幾つかの規格が存在するのだ。

 

さて、ちょっとした調べごとをするにあたり、Excelのシート上の文字をコピー&ペーストするのが件数が多くて面倒なので、検索エンジンで検索させ、結果を標準ブラウザで開く、という処理を作ってみようか、と思って着手してみた。

インターネットの世界ではUTF-8が強い。例えばYahooのアメリカのサイトはUTF-8で書かれているし、検索エンジンにもUTF-8という文字がパラメータで渡り、全角文字は%EF・・とかいう形式になるが、これもUTF-8のコードをエンコードしているだけである。

UTF-8 は Unicode だから、その文字コードを分解すればいいか、というと、そうは問屋が卸さないUTF-8では半角文字が1バイト、全角文字は3バイトになっているではないか!半角も全角も2バイト、という内部コードとは異なるのだ。同じUnicodeという名を使いながら、コード体系が異なるのである。

 

調べてみると、内部コードはUTF-16だそうだ。UTF-16にもBE、LEに分かれるらしい。ということは、%EF・・とかいう形式にするには、UTF-16 から UTF-8 に変換し、そのあとバラす必要があるようだ。

VBAで作るのも一興だが、DLLとか、探せばあるんだろうな・・。

 

参考

 WikiPedia Unicode