トップ 一覧 検索 ヘルプ RSS ログイン

文字コードの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
*Java
!!!参考サイト
!!@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や入力フォームで文字化けする場合の対処方法
*http://www.atmarkit.co.jp/fjava/rensai3/mojibake03/mojibake03.html
デフォルト・エンコーディングは、Windows上のJVMではWindows-31J(MS932)となり、UNIXではLANG変数で設定された文字コード(EUC-JPやUTF-8など)になる。そのため、例えばWindows上で開発した成果物をLinuxサーバ上で運用するケースなどにおいて、デフォルト・エンコーティングの違いによる文字化けが発生しやすい。
Javaアプリケーション開発では、自分が書いたコードがデフォルト・エンコーティングに依存しないように心掛けよう。例えばテキスト・ファイルを読み込む場合は、以下のようにFileInputStreamクラスとInputStreamReaderクラスで実装にすればよいだろう。

""デフォルト・エンコーディングは、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クラスのコンストラクタで文字コードを明示的に記述でき、デフォルト・エンコーティングに依存しない実装となる。
""この方法であれば、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
**csWindows31J
**windows-932
**MS932
*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
**EUC_JP_Solaris
**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)

!!文字コード変換
*http://developer.java.sun.com/developer/technicalArticles/Programming/sprintf/PrintfFormat.java を取得
*ソース
 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)