iOS (iPod touch) からのメールの添付のファイル名中の「発」が化ける ― 2012年10月31日
最近、GNOME 標準のメールソフトである Evolution にて受信したメールで、メールに添付されたファイルのファイル名が iso-2022-jp''%1B%24B...
というものになってしまう事例が発生し、なぜだろうと調べてみました。
調べた方法は、
- evolution-data-server のソースコードを apt-get source で展開
- camel/camel-mime-utils.c の
header_decode_param_list
にデバッグ用のprintf
を仕込んでトレース
という単純なものです。まぁ、ここに辿りつくまでにいろいろと試行錯誤したのですが。
結果、ファイル名に「/」が含まれているのが原因でした。再現するには具体的には、
- 「開発.txt」というファイルを作成し、メールに添付して送る
- それを iOS の標準のメーラーで転送する。テストしたのは iPod touch 5 の iPod Mail (10A406) です。iOS は 6.0 (10A406)
- 受信する
というだけです。まず、送信時には以下のようなヘッダとなります
Content-Disposition: attachment; filename*=iso-2022-jp''%1B$B3+H%2F%1B%28B.txt
これを iOS 6.0 (10A406) のメーラーで転送すると次のようになります。
Content-Disposition: attachment; filename*=iso-2022-jp''%1B%24B3%2BH/%1B%28B.txt
filename パラメーターの途中にある「H%2F」が「H/」になってしまってるのです。おおざっぱに言えば、これは「発」の文字を ISO-2022-JP で表現したものです。
US-ASCII でない文字をパラメーターにエンコードする手順を定義したRFC 2045 および RFC 2231 によれば、'/
' (スラッシュ) は tspecials に該当し、token にそのまま使える文字ではないため、適切にエンコードしなくてはなりません。
しかし、iOS から送った場合は生で '/' が出現するため、そこで token が切られ、中途半端な文字列がデコード対象となってしまいます。そのため、Evolution では化けてしまったようです。tspecials でもない $ や + は encode しているのに。
なお、iPod でこの転送されたメールを見ても文字化けはしません。'/' を tspecials として見てないのかもしれません。なんか不安ですね。
2012.11.1 追記
iPhone 4 上の iOS 5.1.1 のメーラーでも再現。バージョンは iPhone Mail (9B206)
2012.11.2追記
iOS 6 がアップデートされ、6.0.1 になりましたが、まだ化けます。iPod Mail (10A523) で確認
コメント
トラックバック
このエントリのトラックバックURL: http://tkusano.asablo.jp/blog/2012/10/31/6619247/tb
※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。
※投稿には管理者が設定した質問に答える必要があります。