ozacc-mail libraryとsun.nio.cs.mapの合わせ技

①や㈱のような機種依存文字もメールとして見られるようにする為には、
UTF-8でメールを送るか、
新しめのJavaであれば、


-Dsun.nio.cs.map=x-windows-iso2022jp/ISO-2022-JP

をvmの引数にして、メールヘッダのcharsetが「ISO-2022-JP」であっても表示することができます。*1
JavaMailをそのまま使用するのであれば、これで問題ないのですが、
S2Maiのように、ozacc-mail libraryを使用している場合、思うような動きになりません。


vmの引数に上記設定を行うことで
「①」や「㈱」のような文字を表示することができるのですが、
「〜」や「£」は、「?」として表示されてしまいます。


これはozacc-mail libraryの中でcharsetが「ISO-2022-JP」の場合、
文字列に「〜」や「£」が含まれると、別のコード値にマッピングしているからです。

対応方法はマッピングしなおさないようにソースコードを変更するしかないと思います。*2
全てのメールクライアントでUTF-8のメールが見られれば、
メールヘッダをUTF-8にすれば良いのですが、現実的に難しいことも多いみたいです。*3


あんまりWeb上に情報が無かったんだけど
ozacc-mail libraryを使っている開発者達は、この辺で悩まないのかなー?
vmを騙すことになるからあまり使われないのかしら。

*1:Windowsクライアント限定?

*2:結局、私のプロジェクトでは対応しないことにしました

*3:JIS2004で増えた文字に対応する為には、この辺の問題は避けられないと思う。さらに、サロゲートペアはDBのカラムサイズも絡んでくるので頭痛い・・・