Java 〜 outlookで文字化けする

サーバー側(Java)でエンコードした文字列を、クライアント側(JavaScript)で受け取り、それをoutlookで表示する場合に文字化けが発生した。

調べてみると、機種依存文字が文字化けしていた。

サーバ側のエンコーディング処理は次。

return java.net.URLEncoder.encode(text, "Shift-JIS");

クライアント側でメールを起動するJavaScriptは次。

window.open('mailto:?cc='+address+'&subject='+subjValue+'&body='+text);

サーバ側でのエンコーディングがShift-JISになっていことが原因。
@ITのJavaの文字化け対策にも記載があるように、Windows環境で標準的に用いられている文字コードは、正確にいうと「Shift_JIS」ではなく、Shift_JISを拡張した「Windows-31J」と呼ばれるWindows標準文字セットであるからだ。