文字化けの対処方法、および文字化けに影響するコード変換の設定について説明します。
文字化け状況
文字化けが発生した場合、原因を追求するために文字化けが起きた状況を確認します。
文字化けする文字と文字化けしない文字の区別をする。
文字化けが発生している箇所を特定する。
文字化けが発生している箇所の文字を16進で表示する。
チェックポイント
Java EEアプリケーションの運用で文字化けが発生した場合のチェックポイントを以下に示します。
ロケールに必要なパッケージをインストールしていますか。
ロケールに必要なパッケージをインストールしていない場合は、インストールしてください。
ロケールの設定は正しいですか。
ロケールを正しく設定していない場合は、ロケールを正しく設定してください。
ロケールの設定については、「6.22 ロケールの設定」を参照してください。
文字化けしている文字に特殊文字「~」が含まれていませんか。
日本語コード(JIS、EUC、シフトJIS)をUnicodeに変換する際の変換規則が異なるために文字化けが発生している可能性があります。コード系は統一してください。統一できない場合は、Java EEアプリケーションで Unicodeから変換する直前にフィルターをかけ対処してください。
その他、Unicodeに変換する際の変換規則が違う文字については「文字化け特殊文字」を参照してください。
「JISAutoDetect」を使用していませんか。
「JISAutoDetect」(自動変換)は、短い日本語文字列などはコード系の認識が正しく行われずコード変換が正しく行われないことがあります。例えば、日本語EUCの文字をShift-JISの半角カタカナだと誤認識した場合、半角カタカナを含む判読不可能な文字列と認識されます。
必要がない限り「JISAutoDetect」を使用しないでください。使用する場合は上記の問題が含まれることを認識した上で使用してください。
「Shift_JIS」を使用していませんか。
JDK/JRE 1.4.1からエンコーディング名「Shift_JIS」の扱いが変更されました。このため、JDK/JRE 1.4.0 以前のバージョンで動作していたJava EEアプリケーションを動作させると文字化けが発生することがあります。
JDK/JRE 1.3と同様に動作させるには、「windows-31j」を指定してください。
コード変換が必要な機能の設定は正しいですか。
データを入力/出力する際に正しくコード変換されない場合は、コード変換の設定を見直し、正しく設定してください。
Webアプリケーションの場合、「文字コードについて」もあわせて参照してください。
ダウンロードしたファイルのファイル名が文字化けする場合、Content-Dispositionヘッダに指定したファイル名に印字可能なASCII以外の文字を使用していませんか。
ダウンロードしたファイルのファイル名が文字化けする場合、WebアプリケーションでContent-Dispositionヘッダに印字可能なASCIIコード範囲ではない文字を設定している可能性が考えられます。「日本語などのASCIIではないファイル名のファイルをダウンロードする場合」を参照し、Content-DispositionヘッダにURLエンコードしたファイル名を設定するよう、Webアプリケーションを修正してください。
文字化け特殊文字
以下に、Unicodeに変換する際の変換規則が違う文字の対応表を示します。
JIS X 0208 | Unicodeへの変換 | ||
---|---|---|---|
33 ('~') | EUC :a1c1 | Solaris上での変換 | U+301c (WAVE DASH) |
SJIS:8160 | Windows(R)上での変換 | U+ff5e (FULLWIDTH TILDE) | |
01-34 ('∥') | EUC :a1c2 | Solaris上での変換 | U+2016 (DOUBLE VERTICAL LINE) |
SJIS:8161 | Windows(R)上での変換 | U+2225 (PARALLEL TO) | |
01-61 ('-') | EUC :a1dd | Solaris上での変換 | U+2212 (MINUS SIGN) |
SJIS:817c | Windows(R)上での変換 | U+ff0d (FULLWIDTH HYPHEN-MINUS) | |
01-81 ('¢') | EUC :a1f1 | Solaris上での変換 | U+00a2 (CENT SIGN) |
SJIS:8191 | Windows(R)上での変換 | U+ffe0 (FULLWIDTH CENT SIGN) | |
01-82 ('£') | EUC :a1f2 | Solaris上での変換 | U+00a3 (POUND SIGN) |
SJIS:8192 | Windows(R)上での変換 | U+ffe1 (FULLWIDTH POUND SIGN) | |
02-44 ('¬') | EUC :a2cc | Solaris上での変換 | U+00ac (NOT SIGN) |
SJIS:81ca | Windows(R)上での変換 | U+ffe2 (FULLWIDTH NOT SIGN) |