PS,1880后程序員

          看不完的牙,寫不完的程序,跑不完的步。
          隨筆 - 97, 文章 - 34, 評論 - 10, 引用 - 0
          數據加載中……

          java zip 編碼

          真不好意思,號稱是國際化工程師,竟然連這個基本概念都混淆了。重新整理,一定要記住。

          Java則采用了平臺無關的UNICODE,Java從一個byte流中讀取一個字符串時,將把平臺相關的byte轉變為平臺無關的Unicode字符串。在輸出時Java將把Unicode字符串轉變為平臺相關的byte流,如果某個Unicode字 符在某個平臺上不存在,將會輸出一個'?'。

           unicode :,而且是定長雙字節(也有四字節的)編碼,
           
           utf:unicode不便于傳輸和存儲。因此而產生了utf編碼,utf編碼兼容iso8859-1編碼,同時也可以用來表示所有語言的字符,不過,utf編碼是不定長編碼,每一個字符的長度從1-6個字節不等。另外,utf編碼自帶簡單的校驗功能。一般來講,英文字母都是用一個字節表示,而漢字使用三個字節

           java字符串處理:
          getBytes(charset)

          這是java字符串處理的一個標準函數,其作用是將字符串所表示的字符按照charset編碼,并以字節方式表示。注意字符串在java內存中總是按unicode編碼存儲的。比如"中文",正常情況下(即沒有錯誤的時候)存儲為"4e2d 6587",如果charset為"gbk",則被編碼為"d6d0 cec4",然后返回字節"d6 d0 ce c4"。如果charset為"utf8"則最后是"e4 b8 ad e6 96 87"。如果是"iso8859-1",則由于無法編碼,最后返回 "3f 3f"(兩個問號)。

            new String(charset)

          這是java字符串處理的另一個標準函數,和上一個函數的作用相反,將字節數組按照charset編碼進行組合識別,最后轉換為unicode存儲。參考上述getBytes的例子,"gbk" 和"utf8"都可以得出正確的結果"4e2d 6587",但iso8859-1最后變成了"003f 003f"(兩個問號)。

          因為utf8可以用來表示/編碼所有字符,所以new String( str.getBytes( "utf8" ), "utf8" ) === str,即完全可逆。

          zip的編碼是utf-8編碼格式


          posted on 2010-09-15 16:41 amenglai 閱讀(287) 評論(0)  編輯  收藏


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


          網站導航:
           
          主站蜘蛛池模板: 祁门县| 建德市| 牙克石市| 阳原县| 凌源市| 济宁市| 广东省| 巴青县| 革吉县| 太谷县| 安庆市| 南安市| 湘潭市| 阳新县| 宁远县| 平乐县| 黎川县| 齐齐哈尔市| 修文县| 团风县| 夏邑县| 沁水县| 锦屏县| 土默特右旗| 彭水| 安宁市| 涡阳县| 类乌齐县| 洮南市| 墨竹工卡县| 泰安市| 铜川市| 五峰| 扬中市| 利津县| 会同县| 昭通市| 三穗县| 罗平县| 德阳市| 隆安县|