一回のメールのタイトルを覚えて文字化けをします。

1823 ワード

Javaの文字化けはいつも頭を悩ます一つのことです。その理由は中にはトランスコードが多すぎるからです。
jspページ、requestパラメータ、データベース読み込みメモリ、tomcat設定、各種ファイルの読み込みはここでは触れません。
 
メールのタイトルが文字化けしています。なぜタイトルが文字化けしているのか、メールのソースを調べてください。
Subject: =?ANSI_X3.4-1968?B?Pz8/Pz8=?=
MIME-Version: 1.0
Content-Type: multipart/mixed; 
boundary="----=_Part_21_1885302116.1359975400518"
 
------=_Part_21_1885302116.1359975400518
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
 
subjectの文字集が間違っていると思いましたが、今は明らかに西欧の文字集です。そこでsubjectを設定します。 
BASE64Encoder enc = BASE64Encoder();  
msg.setSubject("=?UTF-8?B?"+enc.encode(subject.getBytes())+"?=");
ソースの表示
Subject: =?UTF-8?B?Pz8/Pw==?=
また試しました mail Message.setHtml Enccoding; 
解析文字セットが変更されました。まだ文字化けです。
このキャラクターの能力に問題があるのではないかと推測し、jvmのデフォルト文字セットのせいかと思います。
System.getProperty("file.encoding").   --->ANSI_X3.4-1968
やっぱりそれです
仮想マシンを起動するときは、システムのデフォルト文字セットを指定していない場合は、システムの文字セットを表示します。
locale -a
C
はいCは何ですか?もしかしてchinaですか ははは 見積もりはシンプルです。
表示/etc/syssconfig/i 18 n
cat  /etc/sysconfig/i18n
LANG="zh_CN.UTF-8"
そこで
source /etc/sysconfig/i18n
再表示 locale-a もうutf-8です
jvmを再起動します。自信満々だと思いますが、結局jvmの文字セットは変わりませんでした。
こんなにたくさん操作しましたか?それとも無効ですか?本当に怒られました。私の理解が足りないかもしれません。もしかして先着順をロードしますか?そこで私は暴力的になるしかないです。jvmを起動するパラメータを修正します。
JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8"
成功しました
javaには文字セットの変換がたくさんあります。編集実行期間は変換が必要です。java自体はUNICODEです。
いろいろな応用シーンの中にもっと複雑なものがあります。例えば、eclipse、tomcatなどです。詳しく分析しなければなりません。一体その一環の問題です。