###前提・実現したいこと
JavaMailでWindows環境依存文字の文字化けを解消したいです。
代替文字に置き換える方法ではなく、①は①として送りたいと思っています。
・charsetはISO-2022-JPです。
・起動オプションでx-windows-iso2022jpに読み替える方法が今の開発では使用できません。
・メールの確認方法として、メーラーが環境整ってなくて使用できないので、
メールサーバーに送られたメールを落としてきて、
サクラエディタにてJIS→SJISに変換してメールの確認をしています。
###発生している問題・エラーメッセージ
JavaMailを使用してメールを送ろうとしていますが、①や㍻等のWindows環境依存文字が文字化けしています。
前提に記述したとおり、起動オプションに設定を追加する方法が取れませんので、
①等をJISコードにするメソッド(下記参照)を作ったのですが、ステップ数が多く、
今の開発の規約で200ステップに抑えるようにと言われているので今のままでは使えません。
ステップ数を抑えるや他に何かやり方がないでしょうか?
よろしくお願いします。
###該当のソースコード
引数で貰った文字列の中に①等の環境依存文字があったら、$B-! (B等JISコードに変換しています。
これでreturnした文字列をメール本文としてsetTextに渡して送信しています。
public String convert(String str){
if(str == null){
return null;
}
char[] ch = str.toCharArray();
char[] convert = new char[500];
int j = 0
for(int i = 0; i < ch.length; i++){
switch (ch[i]){
case ‘\u2460’: //①のUnicode
convert[j] = ‘\u001B’ //ESC
j++;
convert[j] = ‘\u0024’ //$
j++;
convert[j] = ‘\u0042’ //B
j++;
convert[j] = ‘\u002D’ //-
j++;
convert[j] = ‘\u0021’ //!
j++;
convert[j] = ‘\u001B’ //ESC
j++;
convert[j] = ‘\u0028’ //(
j++;
convert[j] = ‘\u0042’ //B
j++;
break;
case ‘\u2460’: //②のUnicode
convert[j] = ‘\u001B’ //ESC
j++;
convert[j] = ‘\u0024’ //$
j++;
convert[j] = ‘\u0042’ //B
j++;
convert[j] = ‘\u002D’ //-
j++;
convert[j] = ‘\u0022’ //"
j++;
convert[j] = ‘\u001B’ //ESC
j++;
convert[j] = ‘\u0028’ //(
j++;
convert[j] = ‘\u0042’ //B
j++;
break;
(略)環境依存文字分、①②と似たことを書いてます。
default:
convert[j] = ch[i];
j++;
break;
}
return String.valueOf(convert);
}

回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/20 00:41 編集
2017/06/20 01:13