Shift_JIS, MS932 and Unicode(收藏自網絡)

          Posted on 2009-02-03 16:52 bluoy 閱讀(1411) 評論(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


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 巴彦县| 澎湖县| 龙口市| 栾城县| 九龙县| 克东县| 五莲县| 黔西县| 洛扎县| 丰镇市| 通州区| 准格尔旗| 瑞安市| 鄱阳县| 乳山市| 南平市| 衡阳市| 宜黄县| 杭锦旗| 塘沽区| 会泽县| 揭阳市| 克什克腾旗| 海阳市| 轮台县| 县级市| 公安县| 教育| 阆中市| 陈巴尔虎旗| 九寨沟县| 新昌县| 宾阳县| 西贡区| 青州市| 长岛县| 西峡县| 修文县| 武定县| 同德县| 阿坝县|