怒りのJava学習 このページをアンテナに追加 RSSフィード

Java初心者が
Java学習の途中で感じた怒りを
叩きつけるブログ

 このブログでは
※コンパイルエラーの99%は入力ミスで出来ています
※コンパイルエラーの1%は故意の省略で出来ています

現在皆様のエラー例を募集中



↓このブログの執筆方針
はじめに

↓ブログランキングへのリンク

クリックでランキングのポイントが加算される
今のところどうでもいい

2009-06-13 相性というかなんというか

[][]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件目に

URLエンコード・デコード 変換できます

デコードするとSHIFT-JISで日本語で表示されたのでSHIFT-JISでエンコードされている事が分かった。

 ここまでで、そもそもURLエンコードとは何か?が良く分からなかったので

http://:title=URLエンコード - Wikipedia

7bit jis

日本語、半角、Shift-JIS - インターネットの言葉と技術 (6)

メール送信の 7bit-jis だと機種依存文字文字化けする対策

JIS X 0201の7ビットと8ビットの区別 - BIGLOBEなんでも相談室

シフトJIS

シフトJIS-はてなキーワード

シフトJIS-通信用語の基礎知識

などなど、色々調べた。(上記のリンク先は必ずしも見る必要はない。)しかし求める情報は得られない。が、最後の二つのリンク先に

US-ASCIIの変種であるJIS X0201を含むShift_JISインターネット上で用いるべきではない。

JIS X 0201を用いているシフトJISは、インターネットメールで使用すべきではない

と書かれていたりして、「ふーむ、やはりシフトJISでURLエンコードするのはダメそうだな!よし、この事を会社の人に教えてあげよう!」などと思ったものだった。

 しかし、念のためもうちょっと調べてみたところ

指定したURLをブラウザで開く、電子メールソフトを開く-DOBON.NET

この例では、シフトJISURLエンコードをしていますが、そのような決まりはありません。むしろ、UTF-8エンコードするほうが推奨されているようです。しかし、ほとんどのメーラーシフトJISしか使えず、UTF-8では文字化けします。ところが逆に、Mozilla Thunderbirdでは、シフトJIS文字化けし、UTF-8では正しく認識されるようです(バージョン1.5で確認)。


このような状況を考えると、むやみにURLエンコードするのは逆に危険と言えます。

な、なんだってぇーー!!?

 つまりサンダーバードのバージョンが1.5である限り、どっちの文字コードエンコードしようとも、どうしても文字化けするメーラーが存在してしまうのか!

 ということは、「ほとんどのメーラーシフトJISしか使えず」と言う状況ではURLエンコードシフトJISでするのが正解っぽいな・・・。サンダーバードユーザーには涙をのんでもらうという事で。つまりあのページはあれで正しかったのだ。

 よかった・・・したり顔で「UTF−8でエンコードした方が良いと思われます」なんて意見しなくて。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/java1rou/20090613/1244936967