Javaにおける文字列の符号化変換
4170 ワード
説明: JVM内部では、文字列はjavaでunicodeで統一されています.ソースファイルがどのように符号化されているかにかかわらず、まず対応する符号化方式で文字列に解析し、文字列をunicode形式のバイト配列に変換して内部記憶します.したがって,ソースファイルがどんなフォーマットであっても,同じ文字列で最後に得られたunicodeバイト配列は完全に一致する.
プログラムが実行されていない場合、文字列は元の符号化バイト配列でシステムディスクに格納される.プログラムが実行されると、文字列はunicode文字配列に変換されてJVMメモリに格納されます(元のバイト配列-->元の符号化方式復号-->文字列-->Unicode符号化-->Unicodeバイト配列)
その他: 1、ASIIコード:文字列の各文字は1バイトで表される.各文字は実際には00 h-7 Fhから7ビットしか使用されていません.128文字しか表現できません.漢字を表すことはできません. 2、Unicodeコード:文字列の各文字は2バイトで表されます.
エンコーディング:文字列----->バイト配列復号:バイト配列----->文字列
文字列GBK回転UTF-8プロセス:
テスト:
プログラムが実行されていない場合、文字列は元の符号化バイト配列でシステムディスクに格納される.プログラムが実行されると、文字列はunicode文字配列に変換されてJVMメモリに格納されます(元のバイト配列-->元の符号化方式復号-->文字列-->Unicode符号化-->Unicodeバイト配列)
その他: 1、ASIIコード:文字列の各文字は1バイトで表される.各文字は実際には00 h-7 Fhから7ビットしか使用されていません.128文字しか表現できません.漢字を表すことはできません. 2、Unicodeコード:文字列の各文字は2バイトで表されます.
エンコーディング:文字列----->バイト配列復号:バイト配列----->文字列
文字列GBK回転UTF-8プロセス:
1、 --> GBK -->GBK ( UTF8 GBK , )
2、GBK --> GBK --> --> unicode -->unicode ( GBK Unicode )
3、unicode --> unicode --> --> UTF8 -->UTF8 ( unicode UTF8 )
4、UTF8 --> UTF8 --> ( UTF8 )
テスト:
public class TestExcode {
public static void main(String[] args) throws IOException {
testStrEncode1();
//testStrEncode2();
//testStrEncode3();
}
public static void testStrEncode1() throws UnsupportedEncodingException {
String a = " ";
// , UTF-8, UTF-8 , UTF-8 。
// ,a unicode JVM
// ISO-8859-1 , unicode , ISO-8859-1
byte[] b = a.getBytes("ISO-8859-1"); //ISO-8859-1 ,
byte[] c = a.getBytes("UTF-8"); // UTF-8,
// UTF-8 ISO-8859-1
// ( )
String result = new String(b,"UTF-8");
String result1 = new String(c,"UTF-8");
System.out.println(result); // '??' , ISO-8859-1
System.out.println(result1); // ' '
}
public static void testStrEncode2() throws UnsupportedEncodingException {
String a = "ä½ å¥½";
// UTF-8, UTF-8 , UTF-8 。
// ,a unicode JVM
// ISO-8859-1 , unicode , ISO-8859-1
byte[] b = a.getBytes("ISO-8859-1"); //ISO-8859-1 "ä½ å¥½",
byte[] c = a.getBytes("UTF-8"); //UTF-8 "ä½ å¥½",
// UTF-8 ISO-8859-1
//
String result = new String(b,"UTF-8");
String result1 = new String(c,"ISO-8859-1");
System.out.println(result); // ' '
System.out.println(result1); // 'ä½ å¥½'
// : testStrEncode1 testStrEncode2
// " " "ä½ å¥½" ,result ' ',result1 "ä½ å¥½",
// "ä½ å¥½" ISO-8859-1 " " UTF-8
}
public static void testStrEncode3() throws UnsupportedEncodingException {
//GBK、ISO-8859-1、UTF-8、Unicode
//GBK UTF-8 , UTF-8 , ,
String fileName = " ";
//GBK ,GBK 。 。
System.out.println(new String(fileName.getBytes("GBK"),"GBK"));
//GBK ,ISO-8859-1 。
System.out.println(new String(fileName.getBytes("GBK"),"ISO-8859-1"));
//GBK , UTF-8 。
System.out.println(new String(fileName.getBytes("GBK")));
//ISO-8859-1 ,ISO-8859-1 。ISO-8859-1 , , 。
System.out.println(new String(fileName.getBytes("ISO-8859-1"),"ISO-8859-1"));
//ISO-8859-1 , UTF-8 。
System.out.println(new String(fileName.getBytes("ISO-8859-1")));
//ISO-8859-1 ,GBK 。
System.out.println(new String(fileName.getBytes("ISO-8859-1"),"GBK"));
//UTF-8 , UTF-8 。
System.out.println(new String(fileName.getBytes("UTF-8")));
//UTF-8 ,ISO-8859-1 。
System.out.println(new String(fileName.getBytes("UTF-8"),"ISO-8859-1"));
//UTF-8 ,GBK 。
System.out.println(new String(fileName.getBytes("UTF-8"),"GBK"));
}
}