タイトル
TOPJavaTIPS → This Page

JavaMailで特定の文字だけ文字化け【Java の TIPS、小ネタ、注意点】

前提

Java開発におけるJavaMailを使う際の注意点を紹介します。
このページに記載している内容は2020/06/15に書かれたものです。
掲載している画面や方法が将来的に変更されている場合があります。

文字化け

JavaMailでメール送信する場合に特定の文字だけ文字化けすることがある。
旧字体漢字の「髙」や「﨑」、「①」、「㈱」、「Ⅰ」などが「?」になってしまう。

これはJava内部で使われている「UTF-8」では上記のような文字がサポートされているが
日本語メール送信に一般的に使われている「iso-2022-jp」ではサポートされていないため。

そのためJavaでメール送信処理をするとき、件名や本文のセット処理で文字化けが起こる。

それを防ぎたい場合は2通りの対応方法がある。
1.メールのキャラクタセットを変更する
2.Javaの起動オプションにキャラクタセットを追加する


メールのキャラクタセットを変更する

日本語メールのキャラクタセットには「iso-2022-jp」が使われることが多い。
「UTF-8」から「iso-2022-jp」への変換で文字化けするんだから
そもそもキャラクタセットを「UTF-8」にしておけば解決かと思いきや
残念ながら「UTF-8」のメールを受信すると文字化けするメーラーが存在するのでNG。。。

しかしありがたいことにJava6からは「x-windows-iso2022jp」という
「iso-2022-jp」の拡張版キャラクタセットを使えるようになっており、
こちらであれば対象の文字がサポートされているため文字化けすることがない。


Javaの起動オプションにキャラクタセットを追加する

プログラム側の対応ではなく起動オプションにキャラクタセットを追加するだけでも対応できる。
-Dsun.nio.cs.map=x-windows-iso2022jp/ISO-2022-JP
これで「iso-2022-jp」が自動的に「x-windows-iso2022jp」にマッピングされるようになる。

プログラム側での「UTF-8」>「iso-2022-jp」変換処理が
実際には自動で「UTF-8」>「x-windows-iso2022jp」となる。


更新履歴

2020/06/15 新規作成


TOPJavaTIPS → This Page