トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

文字コード

参考サイト

@IT > Java Solution > 短期集中連載:Javaの文字化け対策FAQ

第1回 Webブラウザが文字コードを判定する基準は?

http://www.atmarkit.co.jp/fjava/rensai3/mojibake01/mojibake01.html

第2回 JSPで特殊文字が文字化けする場合の対処方法

http://www.atmarkit.co.jp/fjava/rensai3/mojibake02/mojibake02.html

第3回 DBや入力フォームで文字化けする場合の対処方法

デフォルト・エンコーディングは、Windows上のJVMではWindows-31J(MS932)となり、UNIXではLANG変数で設定された文字コード(EUC-JPやUTF-8など)になる。そのため、例えばWindows上で開発した成果物をLinuxサーバ上で運用するケースなどにおいて、デフォルト・エンコーティングの違いによる文字化けが発生しやすい。

Javaアプリケーション開発では、自分が書いたコードがデフォルト・エンコーティングに依存しないように心掛けよう。例えばテキスト・ファイルを読み込む場合は、以下のようにFileInputStreamクラスとInputStreamReaderクラスで実装にすればよいだろう。

InputStreamReader isr = new InputStreamReader(
   new FileInputStream("filename.txt"), "Windows-31J");  

この方法であれば、InputStreamReaderクラスのコンストラクタで文字コードを明示的に記述でき、デフォルト・エンコーティングに依存しない実装となる。

第4回 JSPのインクルードに関連する文字化けを解消

http://www.atmarkit.co.jp/fjava/rensai3/mojibake04/mojibake04.html

その他

Wikipedia Microsoftコードページ932

http://ja.wikipedia.org/wiki/Microsoft%E3%82%B3%E3%83%BC%E3%83%89%E3%83%9A%E3%83%BC%E3%82%B8932

Shift_JISのエイリアスの変更について

http://www.ingrid.org/java/i18n/unicode.html

文字コードの墓場 - しいしせねっと

http://siisise.net/charset.html

検証

よく使うエンコーディング

  • Windows-31J
  • Shift_JIS
  • MS932
  • euc-jp
  • euc-jp-linux

正式名と別名

  • EUC-JP
    • eucjis
    • x-eucjp
    • csEUCPkdFmtjapanese
    • eucjp
    • Extended_UNIX_Code_Packed_Format_for_Japanese
    • x-euc-jp
    • euc_jp
  • ISO-2022-JP
    • jis
    • jis_encoding
    • csjisencoding
    • csISO2022JP
    • iso2022jp
  • JIS_X0201
    • JIS_X0201
    • X0201
    • JIS0201
    • csHalfWidthKatakana
  • JIS_X0212-1990
    • jis_x0212-1990
    • iso-ir-159
    • x0212
    • JIS0212
    • csISO159JISX02121990
  • Shift_JIS
    • shift-jis
    • x-sjis
    • ms_kanji
    • shift_jis
    • csShiftJIS
    • sjis
    • pck
  • UTF-16
    • UTF_16
  • UTF-8
    • UTF8
  • windows-31j
  • x-JIS0208
    • JIS_C6626-1983
    • JIS0208
    • csISO87JISX0208
    • x0208
    • JIS_X0208-1983
    • iso-ir-87
  • x-euc-jp-linux
    • euc_jp_linux
    • euc-jp-linux
  • x-eucJP-Open

エンコーディング一覧取得

  • ソース
import java.nio.charset.Charset;
import java.util.Iterator;
import java.util.SortedMap;

public class ListCharsets {
	public static void main(String[] args) {

		// 全ての Charset を取得
		SortedMap charsets = Charset.availableCharsets();
		Iterator ci = charsets.keySet().iterator();
		while (ci.hasNext()) {
			// それぞれの Charset について
			Charset charset = Charset.forName((String)ci.next());
			// 全ての別名を取得
			String names = charset.toString() + " (";
			Iterator ai = charset.aliases().iterator();
			while (ai.hasNext()) {
				String alias = (String) ai.next();
				names += " " + alias.toString();
			}
			names += ")";
			// 名前と別名を出力
			System.out.println(names);
		}
	}
}

WindowsXP+jdk1.4.2_08

Big5 ( csBig5)
Big5-HKSCS ( big5-hkscs Big5_HKSCS big5hkscs)
EUC-JP ( eucjis x-eucjp csEUCPkdFmtjapanese eucjp Extended_UNIX_Code_Packed_Format_for_Japanese x-euc-jp euc_jp)
EUC-KR ( ksc5601 5601 ksc5601_1987 ksc_5601 ksc5601-1987 euc_kr ks_c_5601-1987 euckr csEUCKR)
GB18030 ( gb18030-2000)
GBK ( windows-936 CP936)
ISO-2022-JP ( jis jis_encoding csjisencoding csISO2022JP iso2022jp)
ISO-2022-KR ( ISO2022KR csISO2022KR)
ISO-8859-1 ( iso-ir-100 8859_1 ISO_8859-1 ISO8859_1 819 csISOLatin1 IBM-819 ISO_8859-1:1987 latin1 cp819 ISO8859-1 IBM819 ISO_8859_1 l1)
ISO-8859-13 ( iso8859_13)
ISO-8859-15 ( 8859_15 csISOlatin9 IBM923 cp923 923 L9 IBM-923 ISO8859-15 LATIN9 ISO_8859-15 LATIN0 csISOlatin0 ISO8859_15_FDIS ISO-8859-15)
ISO-8859-2 ( l2 iso-ir-101 ISO_8859-2:1987 ISO_8859-2 latin2 csISOLatin2 iso8859_2 ISO8859-2)
ISO-8859-3 ()
ISO-8859-4 ( iso-ir-110 l4 latin4 csISOLatin4 iso8859_4 ISO_8859-4:1988 ISO_8859-4)
ISO-8859-5 ( cyrillic iso8859_5 ISO_8859-5 iso-ir-144 csISOLatinCyrillic)
ISO-8859-6 ()
ISO-8859-7 ( greek8 ECMA-118 sun_eu_greek ELOT_928 ISO_8859-7:1987 iso-ir-126 ISO_8859-7 iso8859_7 greek csISOLatinGreek)
ISO-8859-8 ()
ISO-8859-9 ( iso-ir-148 latin5 l5 ISO_8859-9 ISO_8859-9:1989 csISOLatin5 iso8859_9)
JIS_X0201 ( JIS_X0201 X0201 JIS0201 csHalfWidthKatakana)
JIS_X0212-1990 ( jis_x0212-1990 iso-ir-159 x0212 JIS0212 csISO159JISX02121990)
KOI8-R ( koi8 cskoi8r)
Shift_JIS ( shift-jis x-sjis ms_kanji shift_jis csShiftJIS sjis pck)
TIS-620 ()
US-ASCII ( ISO646-US IBM367 ASCII cp367 ascii7 ANSI_X3.4-1986 iso-ir-6 us 646 iso_646.irv:1983 csASCII ANSI_X3.4-1968 ISO_646.irv:1991)
UTF-16 ( UTF_16)
UTF-16BE ( X-UTF-16BE UTF_16BE ISO-10646-UCS-2)
UTF-16LE ( UTF_16LE X-UTF-16LE)
UTF-8 ( UTF8)
windows-1250 ( cp1250)
windows-1251 ( cp1251)
windows-1252 ( cp1252)
windows-1253 ( cp1253)
windows-1254 ( cp1254)
windows-1255 ()
windows-1256 ()
windows-1257 ( cp1257)
windows-1258 ()
windows-31j ( csWindows31J windows-932 MS932)
x-EUC-CN ( gb2312 EUC_CN euccn euc-cn gb2312-80 gb2312-1980)
x-euc-jp-linux ( euc_jp_linux euc-jp-linux)
x-EUC-TW ( cns11643 euc_tw EUC-TW euctw)
x-eucJP-Open ( EUC_JP_Solaris eucJP-open)
x-ISCII91 ( iscii ST_SEV_358-88 iso-ir-153 csISO153GOST1976874 ISCII91)
x-JIS0208 ( JIS_C6626-1983 JIS0208 csISO87JISX0208 x0208 JIS_X0208-1983 iso-ir-87)
x-Johab ( johab ms1361 ksc5601-1992 ksc5601_1992)
x-MS950-HKSCS ( MS950_HKSCS)
x-mswin-936 ( ms936 ms_936)
x-windows-949 ( windows949 ms_949 ms949)
x-windows-950 ( windows-950 ms950)

文字コード変換

import java.io.UnsupportedEncodingException;

public class Test03 {

	public static void main(String[] args) {
		System.out.println(outputEncodingBytes('A'));
		System.out.println(outputEncodingBytes('1'));
		System.out.println(outputEncodingBytes('あ'));
		System.out.println(outputEncodingBytes('ア'));
		System.out.println(outputEncodingBytes('A'));
		System.out.println(outputEncodingBytes('−'));
		System.out.println(outputEncodingBytes('〜'));

	}

	static String outputEncodingBytes(char c1) {
		String str = c1 + " :";
		try {
			str += outputBytes(c1);
			str += outputBytes(c1, "Shift-JIS");
			str += outputBytes(c1, "MS932");
			str += outputBytes(c1, "euc-jp");
			str += outputBytes(c1, "euc-jp-linux");
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return str;
	}

	static String outputBytes(char c, String encoding)
		throws UnsupportedEncodingException {
		return " "
			+ encoding
			+ "("
			+ hexBytes(new String("" + c).getBytes(encoding))
			+ ")";
	}

	static String outputBytes(char c) {
		return " default(" + hexBytes(new String("" + c).getBytes()) + ")";
	}

	static String hexBytes(byte[] bytes) {
		String output = "";
		for (int count = 0; count < bytes.length; count++) {
			String hex = new PrintfFormat("%2x").sprintf(bytes[count]);
			output += " 0x" + hex.substring(hex.length() - 2, hex.length());
		}
		return output;
	}
}

WindowsXP + jdk1.4.2_04

A : default( 0x41) Shift-JIS( 0x41) MS932( 0x41) euc-jp( 0x41) euc-jp-linux( 0x41)
1 : default( 0x31) Shift-JIS( 0x31) MS932( 0x31) euc-jp( 0x31) euc-jp-linux( 0x31)
あ : default( 0x82 0xa0) Shift-JIS( 0x82 0xa0) MS932( 0x82 0xa0) euc-jp( 0xa4 0xa2) euc-jp-linux( 0xa4 0xa2)
ア : default( 0x83 0x41) Shift-JIS( 0x83 0x41) MS932( 0x83 0x41) euc-jp( 0xa5 0xa2) euc-jp-linux( 0xa5 0xa2)
A : default( 0x82 0x60) Shift-JIS( 0x82 0x60) MS932( 0x82 0x60) euc-jp( 0xa3 0xc1) euc-jp-linux( 0xa3 0xc1)
− : default( 0x81 0x7c) Shift-JIS( 0x21 0x29) MS932( 0x81 0x7c) euc-jp( 0x21 0x29) euc-jp-linux( 0x21 0x29)
〜 : default( 0x81 0x60) Shift-JIS( 0x21 0x29) MS932( 0x81 0x60) euc-jp( 0x8f 0xa2 0xb7) euc-jp-linux( 0x21 0x29)

WindowsXP + jdk1.4.2_05

A : default( 0x41) Shift-JIS( 0x41) MS932( 0x41) euc-jp( 0x41) euc-jp-linux( 0x41)
1 : default( 0x31) Shift-JIS( 0x31) MS932( 0x31) euc-jp( 0x31) euc-jp-linux( 0x31)
あ : default( 0x82 0xa0) Shift-JIS( 0x82 0xa0) MS932( 0x82 0xa0) euc-jp( 0xa4 0xa2) euc-jp-linux( 0xa4 0xa2)
ア : default( 0x83 0x41) Shift-JIS( 0x83 0x41) MS932( 0x83 0x41) euc-jp( 0xa5 0xa2) euc-jp-linux( 0xa5 0xa2)
A : default( 0x82 0x60) Shift-JIS( 0x82 0x60) MS932( 0x82 0x60) euc-jp( 0xa3 0xc1) euc-jp-linux( 0xa3 0xc1)
− : default( 0x81 0x7c) Shift-JIS( 0x21 0x29) MS932( 0x81 0x7c) euc-jp( 0x21 0x29) euc-jp-linux( 0x21 0x29)
〜 : default( 0x81 0x60) Shift-JIS( 0x21 0x29) MS932( 0x81 0x60) euc-jp( 0x8f 0xa2 0xb7) euc-jp-linux( 0x21 0x29)

WindowsXP + jdk1.4.2_07

A : default( 0x41) Shift-JIS( 0x41) MS932( 0x41) euc-jp( 0x41) euc-jp-linux( 0x41)
1 : default( 0x31) Shift-JIS( 0x31) MS932( 0x31) euc-jp( 0x31) euc-jp-linux( 0x31)
あ : default( 0x82 0xa0) Shift-JIS( 0x82 0xa0) MS932( 0x82 0xa0) euc-jp( 0xa4 0xa2) euc-jp-linux( 0xa4 0xa2)
ア : default( 0x83 0x41) Shift-JIS( 0x83 0x41) MS932( 0x83 0x41) euc-jp( 0xa5 0xa2) euc-jp-linux( 0xa5 0xa2)
A : default( 0x82 0x60) Shift-JIS( 0x82 0x60) MS932( 0x82 0x60) euc-jp( 0xa3 0xc1) euc-jp-linux( 0xa3 0xc1)
− : default( 0x81 0x7c) Shift-JIS( 0x21 0x29) MS932( 0x81 0x7c) euc-jp( 0x21 0x29) euc-jp-linux( 0x21 0x29)
〜 : default( 0x81 0x60) Shift-JIS( 0x21 0x29) MS932( 0x81 0x60) euc-jp( 0x8f 0xa2 0xb7) euc-jp-linux( 0x21 0x29)

Redhat Linux 9 + jdk1.4.1_05

A : default( 0x41) Shift-JIS( 0x41) MS932( 0x41) euc-jp( 0x41) euc-jp-linux( 0x41)
1 : default( 0x31) Shift-JIS( 0x31) MS932( 0x31) euc-jp( 0x31) euc-jp-linux( 0x31)
あ : default( 0xa4 0xa2) Shift-JIS( 0x82 0xa0) MS932( 0x82 0xa0) euc-jp( 0xa4 0xa2) euc-jp-linux( 0xa4 0xa2)
ア : default( 0xa5 0xa2) Shift-JIS( 0x83 0x41) MS932( 0x83 0x41) euc-jp( 0xa5 0xa2) euc-jp-linux( 0xa5 0xa2)
A : default( 0xa3 0xc1) Shift-JIS( 0x82 0x60) MS932( 0x82 0x60) euc-jp( 0xa3 0xc1) euc-jp-linux( 0xa3 0xc1)
− : default( 0xa1 0xdd) Shift-JIS( 0x81 0x7c) MS932( 0x3f) euc-jp( 0xa1 0xdd) euc-jp-linux( 0xa1 0xdd)
〜 : default( 0xa1 0xc1) Shift-JIS( 0x81 0x60) MS932( 0x3f) euc-jp( 0xa1 0xc1) euc-jp-linux( 0xa1 0xc1)

FreeBSD-4.9 + jdk1.4.2-p5

A : default( 0x41) Shift-JIS( 0x41) MS932( 0x41) euc-jp( 0x41) euc-jp-linux( 0x41)
1 : default( 0x31) Shift-JIS( 0x31) MS932( 0x31) euc-jp( 0x31) euc-jp-linux( 0x31)
あ : default( 0xa4 0xa2) Shift-JIS( 0x82 0xa0) MS932( 0x82 0xa0) euc-jp( 0xa4 0xa2) euc-jp-linux( 0xa4 0xa2)
ア : default( 0xa5 0xa2) Shift-JIS( 0x83 0x41) MS932( 0x83 0x41) euc-jp( 0xa5 0xa2) euc-jp-linux( 0xa5 0xa2)
A : default( 0xa3 0xc1) Shift-JIS( 0x82 0x60) MS932( 0x82 0x60) euc-jp( 0xa3 0xc1) euc-jp-linux( 0xa3 0xc1)
− : default( 0xa1 0xdd) Shift-JIS( 0x81 0x7c) MS932( 0x3f) euc-jp( 0xa1 0xdd) euc-jp-linux( 0xa1 0xdd)
〜 : default( 0xa1 0xc1) Shift-JIS( 0x81 0x60) MS932( 0x3f) euc-jp( 0xa1 0xc1) euc-jp-linux( 0xa1 0xc1)

RHEL4 + jdk1.4.2_13

A : default( 0x41) Shift-JIS( 0x41) MS932( 0x41) euc-jp( 0x41) euc-jp-linux( 0x41)
1 : default( 0x31) Shift-JIS( 0x31) MS932( 0x31) euc-jp( 0x31) euc-jp-linux( 0x31)
あ : default( 0xa4 0xa2) Shift-JIS( 0x82 0xa0) MS932( 0x82 0xa0) euc-jp( 0xa4 0xa2) euc-jp-linux( 0xa4 0xa2)
ア : default( 0xa5 0xa2) Shift-JIS( 0x83 0x41) MS932( 0x83 0x41) euc-jp( 0xa5 0xa2) euc-jp-linux( 0xa5 0xa2)
A : default( 0xa3 0xc1) Shift-JIS( 0x82 0x60) MS932( 0x82 0x60) euc-jp( 0xa3 0xc1) euc-jp-linux( 0xa3 0xc1)
− : default( 0xa1 0xdd) Shift-JIS( 0x81 0x7c) MS932( 0x3f) euc-jp( 0xa1 0xdd) euc-jp-linux( 0xa1 0xdd)
〜 : default( 0xa1 0xc1) Shift-JIS( 0x81 0x60) MS932( 0x3f) euc-jp( 0xa1 0xc1) euc-jp-linux( 0xa1 0xc1)

RHEL + jdk1.5.0_11

A : default( 0x41) Shift-JIS( 0x41) MS932( 0x41) euc-jp( 0x41) euc-jp-linux( 0x41)
1 : default( 0x31) Shift-JIS( 0x31) MS932( 0x31) euc-jp( 0x31) euc-jp-linux( 0x31)
あ : default( 0xa4 0xa2) Shift-JIS( 0x82 0xa0) MS932( 0x82 0xa0) euc-jp( 0xa4 0xa2) euc-jp-linux( 0xa4 0xa2)
ア : default( 0xa5 0xa2) Shift-JIS( 0x83 0x41) MS932( 0x83 0x41) euc-jp( 0xa5 0xa2) euc-jp-linux( 0xa5 0xa2)
A : default( 0xa3 0xc1) Shift-JIS( 0x82 0x60) MS932( 0x82 0x60) euc-jp( 0xa3 0xc1) euc-jp-linux( 0xa3 0xc1)
− : default( 0xa1 0xdd) Shift-JIS( 0x81 0x7c) MS932( 0x3f) euc-jp( 0xa1 0xdd) euc-jp-linux( 0xa1 0xdd)
〜 : default( 0xa1 0xc1) Shift-JIS( 0x81 0x60) MS932( 0x3f) euc-jp( 0xa1 0xc1) euc-jp-linux( 0xa1 0xc1)