csusky

          常用鏈接

          統計

          最新評論

          JAVA 的字符編碼的問題

          首先講一講字符集
           JDK1.4版本引入了java.nio包加入了Charset類來統一字符集的轉換,字符集給出了雙字節Unicode碼序列與本地字符編碼中采用的字節序列之間的映射
          字符集的名稱不區分大小寫,可以用官方名稱或者任何一個別名調用靜態方法forName來獲得Charset

          1Charset charset=Charset.forName("GBK");
          Charset的aliases()方法返回一個Set<String>集合,表示該字符集所具有的所有別名
          Set<String> aliases=charset.aliases();
          查看虛擬機所支持的字符集以及名字可用Charset的靜態方法availableCharsets()返回一個SortedMap
          1 Map<String,Charset> map=Charset.availableCharsets();
          2            for(String setname:map.keySet()) {
          3                System.out.println(setname);
          4            }
          一旦有了字符集,就可以用他在本地字符串和Unicode字節序列之間轉換
          如下將一個字符串編碼為gbk    charset.encode(str)函數返回一個ByteBuffer對象
          1String str=new String("曉宇");
          2            ByteBuffer  buff = charset.encode(str);
          3            byte[] bytes=buff.array();
          同樣,可以將剛才按照GBK方式編碼的字節流解碼為正確的字符流
          1ByteBuffer by=ByteBuffer.wrap(bytes, 0, bytes.length);
          2      CharBuffer cb=charset.decode(by);//返回一個CharBuffer對象,已經將字節數組轉化為字符數組
          3      System.out.println("  "+cb.toString());


          實際上String類中集成了Charset對象的使用,String類有兩個用于編碼和解碼的函數

          1byte[] bytes = str.getBytes("CharsetName");  //將字符串str按照指定名稱的Charset進行編碼成字節數組
          2            String str2=new String(bytes,"CharsetName"); //將字節數組按照指定名稱的Charset解碼為字符串


          在輸入輸出流中有兩個用于將字節流轉化為指定編碼格式的字符流的類  InputStreamReader/OutputStreamReader
          這兩個類是讀寫流和讀寫器的橋梁 用法如下

          1InputStreamReader isr = new InputStreamReader(in, "charsetname");
          2            BufferedReader br = new BufferedReader(isr);//加入一個BufferedReader,可以用到該類的readLine()

          該用法在我的另外一篇socket備忘的里面體現了,可將網絡傳過來的utf-8格式編碼的字節流正確的解碼,以至于顯示的時候不會出現亂碼





          posted on 2008-02-24 16:44 曉宇 閱讀(524) 評論(0)  編輯  收藏 所屬分類: JAVA基礎

          主站蜘蛛池模板: 新疆| 大竹县| 延吉市| 陇西县| 沅江市| 新乐市| 睢宁县| 平湖市| 奉化市| 鱼台县| 潍坊市| 钟祥市| 九江县| 建昌县| 西乌珠穆沁旗| 得荣县| 九龙县| 固始县| 土默特左旗| 石楼县| 临潭县| 兴安县| 文安县| 达孜县| 通州市| 洛隆县| 来安县| 思南县| 同江市| 沅江市| 新营市| 无为县| 荣成市| 石泉县| 宝坻区| 永泰县| 新丰县| 马公市| 开原市| 马鞍山市| 正定县|