« PHPで、いわゆる機種依存文字の文字コード変換(EUC-JP→UTF-8)にはまる | トップページ | 【PHPネタ】htmlspecialchars関数はサニタイズ関数? »

2007/12/14

auからのメールをPCで受信した際に、文末に「忞」の文字が入っている場合(文字化け解読)

私は携帯は持っていないのですが、妻の友達はやはり?携帯を持っていて、携帯からよくメールを送ってくださいます。妻はパソコンでメールを受信していますが、子育てで忙しいので、妻のメールは私のパソコンにも入ってくるようにしてあって、メールが来ると「なんか、メールが来ていたよ」と教えてあげます。いろいろなテレビ番組を見ていると、伴侶の携帯メールの中身を見たとか見ないとかでもめる場合があるようですが、私たちの家庭にはそれが全然ないのは、本当に恵まれていると思います。

動的なHTMLソースをリアルタイムにサーバ上で暗号化(JavaScriptソースを生成)するPHPライブラリさて、その妻のお友だちからのメールには、毎回ではないのですが、かなりの頻度で「忞」という文字が入っています。「文」の下に「心」で字自体は難しくないのですが、読めないので難しく感じます。調べてみると、「ビン」とか「つとめる(送り仮名は?)」と読むようです。

絵文字であろうことはすぐに分かりましたが、いったいどんな文字が書かれていたのか気になりだしましたので、調べてみました。

KDDI au: 技術情報 > 絵文字
http://www.au.kddi.com/ezfactory/tec/spec/3.html
http://www.au.kddi.com/ezfactory/tec/spec/pdf/typeD.pdf

このPDFファイルにて、その正体はわかりました。左の「あせり」のマークです。

ただ、ここまでたどりつくのはかなり時間がかかって、(少なくとも最初は)あてずっぽうなところがありました。経緯を全部書くととても長くなるのですが、まず、このタイプDのPDFを開くと、「KDDI絵文字用Shift-JISコード」「Unicode」「絵文字 Eメール送出用JIS」「(参考)Eメール送出用JIコードに対応したShift_JISコード」と項目がたくさんあって、どれを使って照合したらいいのか一目では分かりませんでした。

どこから攻めても同じ文字にたどり着くのなら分かりやすいのですが、私のやり方が悪いのか、相互の文字コード変換をPHPでいろいろやってみても、どうもうまくいきません(独自の変換アルゴリズムがある?)。結局、私が唯一理解できたのが、「絵文字 Eメール送出用JIS」でした。IME-2002(IME バッド - 文字一覧)で調べてみると、「忞」のJISコードは「0x7a21」です。auが「0x7a21」で何らかの文字をメールで送信しているので、パソコン(Windows)でメールを受信すると、マイクロソフト社が考えるところの「0x7a21」である「忞」の字を表示させているのであろうと考えれば、理屈が通ります。

そして、auのPDFで「絵文字 Eメール送出用JIS」が「7a21」であるものを探してみると、右の画像(絵文字番号452.PDFの8ページ目)だったというわけです。

ただ、この一例だけを以ってして、この解釈が正しいかどうかを結論付けることは、はなはだ怪しかったので、別の文字化けの事例を探してみることにしました。すると、その妻の友達からのメールで「寬」という文字が文末にあるメールが1通ありました。「寛大」の「寛」に似ていますが、少し違って異字体のようです。

この「寬」のJISコードをIME-2002で調べてみると、「0x796e」でした。たまたまですが、「忞」のすぐそばにありました。この文字コードでau提供のPDFを調べてみると、絵文字番号435番の「みかん」のようです。正直、焦りました。あまりにも唐突なような気がして、この解釈が間違っているように思えたからです。

しかし、そのメールの本文をよく見てみると、「みかんがり行ったのでまた食べてね寬」とありました。みかんを届けてくれた際のメールだったのです。ここで、この探し方の正しさをほぼ確信できるようになりました。でも、これでは、あまりにもアナログ的解決であり、何とかプログラムで、文字化けしている文字の正体を探す方法はないかと考えてみることにしました。元の文字のJISコードを探し出してからの作業は、PDFファイルからアナログ(目視)で探し出すのか、それとも完全データベース化しておいてプログラムで検索させるかはここでは置いておいて、とりあえずJISコードを求めるところまでをPHPで行いたいと考えました。かなり強引なやり方ですが、

のようにすることで、「忞」のJISコードは「(0x)7a21」であり、「寬」のJISコードは「(0x)796e」であることが計算できました。もっと文字コードの勉強をしないといけないです。



なお、左の「あせり」のマークは、先述のauのサイトから絵文字データ(フォーマットはイラストレータデータ。拡張子.ai)をダウンロードして使いました。ただ、私はIllustratorは持って入ないので、

● イラストレータの入っていない環境でイラストレータのファイル(AI形式)を開く方法 さとーC++ぶろぐ/ウェブリブログ
http://sato-si.at.webry.info/200609/article_1.html

で紹介されている方法にしたがい、Adobe Readerでaiファイルを開いてから、それをキャプチャーして、JPEGファイルにしました。Adobe Readerのバージョンによって表示できないかもしれませんが、これは目から鱗の裏技です。とても得した気持ちです。

|

« PHPで、いわゆる機種依存文字の文字コード変換(EUC-JP→UTF-8)にはまる | トップページ | 【PHPネタ】htmlspecialchars関数はサニタイズ関数? »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: auからのメールをPCで受信した際に、文末に「忞」の文字が入っている場合(文字化け解読):

« PHPで、いわゆる機種依存文字の文字コード変換(EUC-JP→UTF-8)にはまる | トップページ | 【PHPネタ】htmlspecialchars関数はサニタイズ関数? »