Posted on 2009-02-03 16:52
bluoy 閱讀(1393)
評論(0) 編輯 收藏
終于搞明白了困惑很久的問題,罪魁禍首還是jdk啊。天殺的。
以下內容轉自網絡:
測試環境:Win2K Pro日文版,SUN J2SDK 1.5.0-beta2
經過測試,發現Shift_JIS和MS932編碼的全角波浪線(“~”)的編碼都是 0x8160(16進制,兩個字節,高位在前)。通過sun.io.ByteToCharMS932轉換后得到Unicode字符'\uFF5E',而通過sun.io.ByteToCharSJIS轉換后則得到Unicode字符'\u301C'。
反之,Unicode字符'\uFF5E'通過sun.io.CharToByteMS932轉換后會得到MS932編碼的本地字符0x8160(16進制,兩個字節,高位在前),而Unicode字符'\u301C'通過 sun.io.CharToByteSJIS轉換后也會得到Shift_JIS編碼的本地字符0x8160(16進制,兩個字節,高位在前),兩者的轉換結果相同。
結論:在WinNT/2K/XP上,MS932和Shift_JIS這兩種本地字符集完全相同,只是分別采用JDK的sun.io.ByteToCharMS932和sun.io.ByteToCharSJIS對個別特殊的本地字符進行轉換后所得到的 Unicode字符并不一樣。實際上,MS932就是WinNT/2K/XP上的Shift_JIS,只是與標準版的Shift_JIS字符集相比,MS932收錄了更多的字符,比如NEC和IBM對Shift_JIS的擴展(如日文中的“?????①..?...”等等);然而,JDK中的 ByteToCharSJIS及CharToByteSJIS卻使用了標準的Shift_JIS字符集,所以部分擴展字符在從byte轉換成char或是從char轉換成byte時會出現亂碼,這的確是JDK讓人非常迷惑的一處。
參考資料1(日文):http://www.asahi-net.or.jp/~ez3k-msym/charsets/jis2ucs.htm