俊星的BLOG

          導航

          <2009年5月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          統計

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          最新隨筆

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          JAVA字符編碼

          測試代碼:
              public static void main(String[] args) {
                  Locale.setDefault(Locale.US);
                  String str 
          = "中G中";
                  String codes[] 
          = "iso8859-1""utf-8""utf-16""unicode""gbk""gb2312" };
                  
          try {
                      System.out.println(str);
                      System.out.println(
          "default code:" + System.getProperty("file.encoding"));
                      
          for (String s : codes) {
                          System.out.println(s 
          + "" + toHex(str.getBytes(s)));
                      }

                  }
           catch (UnsupportedEncodingException e) {
                      e.printStackTrace();
                  }

              }


              
          private static String toHex(byte[] buffer) {
                  StringBuffer sb 
          = new StringBuffer(buffer.length * 3);

                  
          for (int i = 0; i < buffer.length; i++{
                      sb.append(Character.forDigit((buffer[i] 
          & 0xf0>> 416));
                      sb.append(Character.forDigit(buffer[i] 
          & 0x0f16));
                      sb.append(
          " ");
                  }


                  
          return sb.toString();
              }

          輸出如下:
          中G中
          default code:GBK
          iso8859-
          1: 3f 47 3f 
          utf-
          8: e4 b8 ad 47 e4 b8 ad 
          utf-
          16: fe ff 4e 2d 00 47 4e 2d 
          unicode: ff fe 2d 4e 
          47 00 2d 4e 
          gbk: d6 d0 
          47 d6 d0 
          gb2312: d6 d0 
          47 d6 d0 

          相關說明:
          1、通過System.getProperty("file.encoding")獲取到當前JVM的默認字符編碼方式,如GBK
          2、iso8859-1則是應用于英文和歐洲其他語言的單字節編碼字符集,“3f”其實對應就是“?”。
          3、utf-8則是unicode編碼的一種轉換方式(Unicode Transformation Format),兼容于ASCII編碼,如對于中文則使用3個字節來存儲,對于英文使用一個字節存儲。
          4、utf-16是unicode編碼的另一種轉換方式,每個直接都采用2個字節來存儲,所以不兼容于ASCII;
                其中“fe ff”是Byte Order Mark(BOM)表示采用的編碼方式為utf-16。
          5、此處的unicode輸出和utf-16本質相同,只不過大小尾序的問題導致單個字節輸出順序相反;
                其中對于windows和linux平臺的utf-16默認采用小尾序(LE little Endion),mac平臺采用大尾。
          6、gbk和gb2312是中文字符集,對于每個字符均采用2個字節存儲,其中gbk兼容gb2312并且還可表示繁體。

          關于存儲字節的計算,假設現在有N個中文和M個英文字符,則如下的計算方式(編碼方式:字節數):
          GBK:2*N+M
          UTF-8:3*N+M
          UTF-16:2*(N+M+1)
          ISO8859-1:N+M

          posted on 2009-05-26 00:12 俊星 閱讀(221) 評論(0)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 林州市| 蚌埠市| 白城市| 建始县| 宣武区| 琼海市| 讷河市| 塔城市| 舟山市| 尼玛县| 和林格尔县| 武夷山市| 四平市| 尉氏县| 昭通市| 永平县| 龙胜| 报价| 宜兴市| 东宁县| 石河子市| 麦盖提县| 瓮安县| 南川市| 怀远县| 木兰县| 车险| 吉首市| 清丰县| 太保市| 万山特区| 安化县| 达日县| 中牟县| 金秀| 江山市| 博兴县| 乌恰县| 五家渠市| 鸡东县| 金华市|