URLエンコードとメール文字化け
ある会社の求人に応募しようとして、そのサイトの応募ボタンを押したら、メールソフトが自動で起動した。それはリンク先のアドレスに”xxxx@xxx.com?subject=%xx%xx&body=%xx%xx”と書いてあれば良くある事なのだが、題名も本文も文字化けしていた。
その会社はIT系だったので、「うーむもしかしたらこれくらいのハードルは突破してきてね、というメッセージなのか?」などと深読みしてしまった。なにしろメーラーの文字エンコードをどのような日本語を含む文字セットにしてもさっぱり読めるようにならなかったからだ。ブラウザの文字エンコードを変更してもダメで、通常のFirefoxからIEに切り替えても全く同じ症状。尋常な文字化けではないと思った。
件名:
�������������������������������������
本文:(本当は全部一行)
���������������������������������
���������������������������������
���������������������������������
���������������������������������
���������������������������������
���������������������������������
���������������������������������
���������������������������������
��������������������������������
さて、解決法を探るにも、初め私はURLエンコードという言葉すら知らなかった。手探りで「エンコード 変換」でググってみる。
すると、
Web便利ツール/URLエンコード・デコードフォーム - TAG index Webサイト
URLエンコードとデコードが行えるフォームです。
URLエンコード、またはデコードのフォームに文字列を入力して、変換用のボタンを押してください。
という便利な変換サイトが最初に来た。ここでURLエンコードという用語を知る。そこでリンク先のURLのコピーを取る(Firefoxではメールアドレスしか採れないが、IEでは「ショートカットのコピー」でmailto:〜body=%xx%xxを採ることができる。)
デコード後 (392バイト)
xxxx@xxx.com?subject=【件名】&body=【本文一行目】
【本文一行目】
【本文二行目】
【本文三行目】
【本文四行目】
【本文五行目】
【本文六行目】
【本文七行目】
【本文八行目】
【本文九行目】デコード前 (956バイト)
xxxx@xxx.com?subject=%xx%xx&body=%xx%xx
(実際は千文字程度あります)
と、きれいに内容を得る事が出来た。これで会社に応募できる!
・・・が、もしこれが試験の一環なら、「ハイ出来ました」だけでは芸がない。「これこれこういう状態なのでこうなりました。そこでこれこれこの様に変更すると良いでしょう。」と提案して見せて合格なのではないだろうか?
そこで、
(1)今使っているメーラーで文字化けが起こらないようにする方法が本当にないのか?
(2)原因は何か?既知の現象か?
(3)最善の対策は何か?
を探してみる事にした。
まずは「%xx%xx」の文字列がどの文字セットで書かれていたのかを調べねばなるまい。掲載ページの文字エンコードはSHIFT-JISだったが、だからと言ってURLエンコードの文字までそうとは限らない。
幸い、「エンコード 変換」でググった9件目に
でデコードするとSHIFT-JISで日本語で表示されたのでSHIFT-JISでエンコードされている事が分かった。
ここまでで、そもそもURLエンコードとは何か?が良く分からなかったので
http://URLエンコード - Wikipedia
7bit jis日本語、半角、Shift-JIS - インターネットの言葉と技術 (6)
メール送信の 7bit-jis だと機種依存文字文字化けする対策
JIS X 0201の7ビットと8ビットの区別 - BIGLOBEなんでも相談室
などなど、色々調べた。(上記のリンク先は必ずしも見る必要はない。)しかし求める情報は得られない。が、最後の二つのリンク先に
US-ASCIIの変種であるJIS X0201を含むShift_JISはインターネット上で用いるべきではない。
JIS X 0201を用いているシフトJISは、インターネットメールで使用すべきではない
と書かれていたりして、「ふーむ、やはりシフトJISでURLエンコードするのはダメそうだな!よし、この事を会社の人に教えてあげよう!」などと思ったものだった。
しかし、念のためもうちょっと調べてみたところ
指定したURLをブラウザで開く、電子メールソフトを開く-DOBON.NET
この例では、シフトJISでURLエンコードをしていますが、そのような決まりはありません。むしろ、UTF-8でエンコードするほうが推奨されているようです。しかし、ほとんどのメーラーでシフトJISしか使えず、UTF-8では文字化けします。ところが逆に、Mozilla Thunderbirdでは、シフトJISで文字化けし、UTF-8では正しく認識されるようです(バージョン1.5で確認)。
このような状況を考えると、むやみにURLエンコードするのは逆に危険と言えます。
な、なんだってぇーー!!?
つまりサンダーバードのバージョンが1.5である限り、どっちの文字コードでエンコードしようとも、どうしても文字化けするメーラーが存在してしまうのか!
ということは、「ほとんどのメーラーでシフトJISしか使えず」と言う状況ではURLエンコードはシフトJISでするのが正解っぽいな・・・。サンダーバードユーザーには涙をのんでもらうという事で。つまりあのページはあれで正しかったのだ。
よかった・・・したり顔で「UTF−8でエンコードした方が良いと思われます」なんて意見しなくて。