Java學習

          java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經搬家了,新的地址是 http://www.javaly.cn 如果有對文章有任何疑問或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂園)指出,我會盡力幫助解決。一起進步

           

          URL中漢字和utf編碼轉換

          URL中漢字和utf編碼轉換

          前面幾章中,我們發表了一些關于URL傳遞參數,如果是中文的時候,亂碼的解決辦法。
           1.解決ajax提交中文、URL中文參數傳遞后的亂碼問題的解決辦法
           2.JAVA 中URL鏈接中文參數亂碼的處理方法
           3.JAVA URL中帶有中文時的處理

           今天我們所說的中文,沒有在url后面的參數中,如果中文在url中間,那如果我要處理,該怎么辦呢?
           呵呵,不著急,我們照樣可以處理:跟我來,照著做就是了

          Java代碼如下:
          package com.gjob.common;

          public class URLtoUTF8 {
              //轉換為%E4%BD%A0形式
              public static String toUtf8String(String s) {
                  StringBuffer sb = new StringBuffer();
                  for (int i = 0; i < s.length(); i++) {
                      char c = s.charAt(i);
                      if (c >= 0 && c <= 255) {
                          sb.append(c);
                      } else {
                          byte[] b;
                          try {
                              b = String.valueOf(c).getBytes("utf-8");
                          } catch (Exception ex) {
                              System.out.println(ex);
                              b = new byte[0];
                          }
                          for (int j = 0; j < b.length; j++) {
                              int k = b[j];
                              if (k < 0)
                                  k += 256;
                              sb.append("%" + Integer.toHexString(k).toUpperCase());
                          }
                      }
                  }
                  return sb.toString();
              }

              //將%E4%BD%A0轉換為漢字
              public static String unescape(String s) {
                  StringBuffer sbuf = new StringBuffer();
                  int l = s.length();
                  int ch = -1;
                  int b, sumb = 0;
                  for (int i = 0, more = -1; i < l; i++) {
                      /* Get next byte b from URL segment s */
                      switch (ch = s.charAt(i)) {
                      case '%':
                          ch = s.charAt(++i);
                          int hb = (Character.isDigit((char) ch) ? ch - '0'
                                  : 10 + Character.toLowerCase((char) ch) - 'a') & 0xF;
                          ch = s.charAt(++i);
                          int lb = (Character.isDigit((char) ch) ? ch - '0'
                                  : 10 + Character.toLowerCase((char) ch) - 'a') & 0xF;
                          b = (hb << 4) | lb;
                          break;
                      case '+':
                          b = ' ';
                          break;
                      default:
                          b = ch;
                      }
                      /* Decode byte b as UTF-8, sumb collects incomplete chars */
                      if ((b & 0xc0) == 0x80) { // 10xxxxxx (continuation byte)   
                          sumb = (sumb << 6) | (b & 0x3f); // Add 6 bits to sumb   
                          if (--more == 0)
                              sbuf.append((char) sumb); // Add char to sbuf   
                      } else if ((b & 0x80) == 0x00) { // 0xxxxxxx (yields 7 bits)   
                          sbuf.append((char) b); // Store in sbuf   
                      } else if ((b & 0xe0) == 0xc0) { // 110xxxxx (yields 5 bits)   
                          sumb = b & 0x1f;
                          more = 1; // Expect 1 more byte   
                      } else if ((b & 0xf0) == 0xe0) { // 1110xxxx (yields 4 bits)   
                          sumb = b & 0x0f;
                          more = 2; // Expect 2 more bytes   
                      } else if ((b & 0xf8) == 0xf0) { // 11110xxx (yields 3 bits)   
                          sumb = b & 0x07;
                          more = 3; // Expect 3 more bytes   
                      } else if ((b & 0xfc) == 0xf8) { // 111110xx (yields 2 bits)   
                          sumb = b & 0x03;
                          more = 4; // Expect 4 more bytes   
                      } else /*if ((b & 0xfe) == 0xfc)*/{ // 1111110x (yields 1 bit)   
                          sumb = b & 0x01;
                          more = 5; // Expect 5 more bytes   
                      }
                      /* We don't test if the UTF-8 encoding is well-formed */
                  }
                  return sbuf.toString();
              }
              
              public static void main(String[] args){
                  System.out.println(URLtoUTF8.toUtf8String("你"));
                  System.out.println(URLtoUTF8.unescape("%E4%BD%A0%20%E5%A5%BD"));
                  
              }
          }

          ############
          運行結果:

          %E4%BD%A0
          你 好


          呵呵,是不是很簡單啊, 文章來源:http://www.javaly.cn/javahome/java/content.detail/URL%E4%B8%AD%E6%B1%89%E5%AD%97%E5%92%8Cutf%E7%BC%96%E7%A0%81%E8%BD%AC%E6%8D%A2/fdc1ed6c22069c56012282d63f7f046c.faces

          posted on 2009-07-16 17:14 找個美女做老婆 閱讀(5118) 評論(0)  編輯  收藏


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


          網站導航:
           

          導航

          統計

          公告

          本blog已經搬到新家了, 新家:www.javaly.cn
           http://www.javaly.cn

          常用鏈接

          留言簿(6)

          隨筆檔案

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 康定县| 沙田区| 东海县| 东乡族自治县| 三门峡市| 上犹县| 黑山县| 绥阳县| 格尔木市| 沙雅县| 台中县| 房产| 静安区| 太湖县| 定兴县| 承德县| 木里| 城市| 谢通门县| 云南省| 平乐县| 洪湖市| 安图县| 彭山县| 新化县| 榆树市| 兴文县| 镇江市| 黔东| 沛县| 安宁市| 红桥区| 渝北区| 栾城县| 弋阳县| 进贤县| 正阳县| 茶陵县| 会理县| 汉源县| 深水埗区|