JavaMailのissueを眺めていたら「UTF-7ってまだ必要なの?」という質問が挙がってました。
github.com
質問内容は「数年前に作ったアプリにおいて、メールを読み込むとjava.io.UnsupportedEncodingExceptionが出たのでjutf7.jarを配置していたが、今もこの対処は必要か?」というもの。
「UTF-7ってなんだっけ?なんでそんなのが出てくるんだろう…」と、ふと気になったので調べてました。
jutf7.jarは以下sourceforgeで手に入るライブラリのようです。
Java UTF-7 Charset support download | SourceForge.net
issueに貼ってあるリンクは以下2つ。
・java.io.UnsupportedEncodingException: unicode-1-1-utf-7?
・Parsing UTF-7 email messages
前者はJDKではUTF-7はサポートしてないよ、という話。後者はJiraからメール送ってエラーとなった現象の話。JIRAのはこの辺でJIRA Mail Plugin関連?な気も。これは最終的にはJavaMail使ってるものなのか…?よくわからないけど、多分以下ブログにあるような話なのだろうなぁと。
www.tdtsh.com
JavaMailのPOPってほとんど触ったことないので今度ちょっと試してみたい。
なお、JavaMailのコード内には自前でUTF-7を処理してるような部分があるとのことで、それに対してSpecリードのBill Shannonさんは「IMAP uses a modified version of UTF-7.」と回答してました。JavaMailのコード調べたのですが、以下の部分と思われます。
BASE64MailboxEncoder
IMAP(Internet Message Access Protocol)のRFC 2060にある5.1.3. Mailbox International Naming Conventionの実装部分のようです。
メールで文字コードと聞くと「ASCII」「iso-2022-jp」、最近だと「UTF-8」も。というイメージですが、「UTF-7」なんていうのもあるんですね。知らなかった。
UTF-7のRFCみると「A Mail-Safe Transformation Format of Unicode」ってあるし、生まれた背景自体メール関連なのか。
そもそも文字コードのこと、あまり理解できていないなぁと思って、ネットの情報で色々調べてましたが、どうしても情報が分散してる感じです(RFCとかまとめて読めという感じなんでしょうが…)。で、体系的にまとまった知識を得たいなぁと思って探していたら以下の書籍がみつかりました。早速買って読んだのですが、とても良かったです。文字コード関連の話が丸々一冊にまとまっていて、350ページくらいあります。歴史的な背景からプログラム(JavaやRubyなど)、さらにWebやメールと文字コードの関係まで深く広く書かれているので、知りたい情報を知れた感じ。
矢野 啓介
技術評論社
売り上げランキング: 44,300
そもそも自分はUnicodeとUTFの関係とか認識できていなかったのだなぁと。本では符号化文字集合(coded character set)、文字符号化方式(character encoding scheme)という言葉で説明されていました。Unicodeは文字にどんな番号を割り当てるか(符号位置)の話でUTFはそれをどういうバイト列で表すか、というもの。その表現の違いによってUTF-8やUTF-16、そしてUTF-7があるのですね。
メール関連で良く出てくるMIME、そしてBASE64、quoted-printableの話も本に載ってて、ちょうど知りたかったので買ってよかったなーと。
調べたときにみたサイトは以下。
equj65.net
tyru.hatenablog.com
メール一般
404 Blog Not Found:Unicodeは文字集合か符号化方式か
www.atmarkit.co.jp
エンコード・コレクション (メール、テキスト関連)
http://wa3.i-3-i.info/word15293.html
http://www.shoai.ne.jp/hirakata-s/it/mail/mail_code.html