posts - 33, comments - 46, trackbacks - 0, articles - 2

          中文編碼相關

          Posted on 2012-01-14 16:16 在路上... 閱讀(331) 評論(0)  編輯  收藏

          碰到中文亂碼的時候,可以考慮使用一個熟悉的中心字符串入手進行調試跟蹤轉換過程的變化,這里記錄一下“中文”漢字的編碼變化過程

          UNICODE編碼:4e2d 6587
          通常在JAVA的內置處理機制中是這樣存儲的,不同的環境中返回的byte[]不一樣,例如windows環境,使用getBytes()返回的是getBytes(“GBK”),linux環境,通常如果設置LANG=zh_CN.UTF-8,這相當于getBytes(“utf-8”).

          GBK編碼:d6d0 cec4,byte[]={-42,-48,-50,-60}

          UTF8編碼:e4 b8 ad e6 96 87,byte[]={-28,-72,-83,-26,-106,-121}

          ISO8859-1編碼:如果試圖將byte[]={-42,-48,-50,-60}采用new String(byte[],”iso8859-1”)讀取,由于不能正確轉換,所以是2個問號byte[]={63,63}
          但是從存儲的角度看,gbk和iso8859-1有類似之處,GBK采用char(2),而iso8859-1采用byte[4],拆分為{-42,-48,-50,-60}

          Javascript:可以使用var str=”\u4E2D\u6587”;來表示

          HTML中,可以使用中&#25991,相當于吧16進制轉換為10進制,再加上轉義控制&#和;結尾。

          如果需要從utf byte[]和GBK byte[]之間互相轉換,在支持unicode的java平臺,可以使用下面的轉換規則

          byte[] utf8={-28,-72,-83,-26,-106,-121};
          String str=new String(utf8,”utf-8”);//轉換為正確的中文
          byte[] gbk=str.getBytes(“GBK”);

          或者:

          byte[] gbk={-42,-48,-50,-60};
          String str=new String(utf8,"GBK");//轉換為正確的中文
          byte[] utf8=str.getBytes("utf-8")

          注意上面的byte[]為java的,與.net不一樣,需要轉換


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


          網站導航:
           
          主站蜘蛛池模板: 沁源县| 彰化县| 苍溪县| 昌宁县| 富源县| 双辽市| 淳化县| 马边| 青铜峡市| 保康县| 彝良县| 高台县| 日喀则市| 汾阳市| 海林市| 东丰县| 卓尼县| 南华县| 罗田县| 永城市| 芜湖市| 岗巴县| 汝南县| 南丰县| 霍林郭勒市| 左权县| 进贤县| 于田县| 仙居县| 钦州市| 博乐市| 宁波市| 平远县| 吉木萨尔县| 绍兴县| 年辖:市辖区| 建瓯市| 成武县| 铜梁县| 沈丘县| 大埔县|