這裏有一段程序:
String a = new String("碁");
String b = new String(a.getByte(),"ISO8859_1");
String c = new String(a.getByte(),"gb2312");
System.out.println("b="+b+" c="+c);
String b = new String(b.getByte("ISO8859_1"),"GBK");
String c = new String(a.getByte("gb2312"),"GBK");
System.out.println("b="+b+" c="+c);
虛擬機的內碼是GBK:
輸出結果是:
b=?? c=??
b=碁 c=??
這就是奇妙之處了。
當a被轉化爲gb2312時由於在編碼表裏找不到對應的編碼,故而被替代爲?的編碼,再轉回來就是?了
而被轉化爲ISO8859_1時,之間將編碼平移過去雖然不能正常顯示,但是保證了正常轉化回來。
ISO8859_1是個比較特殊的字符集,它是一個8位的編碼,這就讓他成爲一個非常好的中介機構,會忠實的將每個字節的數據記錄下來而不改變,估計這是web傳輸和jdbc傳輸使用它爲字符集的原因吧。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=321285