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


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


          網站導航:
           
          主站蜘蛛池模板: 醴陵市| 沙雅县| 平罗县| 阳新县| 句容市| 尖扎县| 沙坪坝区| 根河市| 靖江市| 聊城市| 安陆市| 惠东县| 武城县| 芜湖县| 嘉禾县| 临沭县| 长海县| 鄂伦春自治旗| 武城县| 二连浩特市| 抚顺市| 云林县| 黄陵县| 平度市| 津南区| 通山县| 苗栗市| 昌宁县| 西城区| 西平县| 镇远县| 海安县| 沁阳市| 江达县| 时尚| 德安县| 诸城市| 万载县| 武穴市| 桂平市| 河池市|