zoukankan      html  css  js  c++  java
  • java中的escape和unescape

          在js中,可以将url中的中文参数通过escape("中文")函数来将中文转换为unicode编码的字符串,即百分号+u+字母/数字。当服务器端未自动对其进行解码时,我们可以自己编写函数来进行转码,如下:

          public static String escape(String src) {  
            int i;  
            char j;  
            StringBuffer tmp = new StringBuffer();  
            tmp.ensureCapacity(src.length() * 6);  
            for (i = 0; i < src.length(); i++) {  
                j = src.charAt(i);  
                if (Character.isDigit(j) || Character.isLowerCase(j)  
                        || Character.isUpperCase(j))  
                    tmp.append(j);  
                else if (j < 256) {  
                    tmp.append("%");  
                    if (j < 16)  
                        tmp.append("0");  
                    tmp.append(Integer.toString(j, 16));  
                } else {  
                    tmp.append("%u");  
                    tmp.append(Integer.toString(j, 16));  
                }  
            }  
            return tmp.toString();  
        }  

        public static String unescape(String src) {  
            StringBuffer tmp = new StringBuffer();  
            tmp.ensureCapacity(src.length());  
            int lastPos = 0, pos = 0;  
            char ch;  
            while (lastPos < src.length()) {  
                pos = src.indexOf("%", lastPos);  
                if (pos == lastPos) {  
                    if (src.charAt(pos + 1) == 'u') {  
                        ch = (char) Integer.parseInt(src  
                                .substring(pos + 2, pos + 6), 16);  
                        tmp.append(ch);  
                        lastPos = pos + 6;  
                    } else {  
                        ch = (char) Integer.parseInt(src  
                                .substring(pos + 1, pos + 3), 16);  
                        tmp.append(ch);  
                        lastPos = pos + 3;  
                    }  
                } else {  
                    if (pos == -1) {  
                        tmp.append(src.substring(lastPos));  
                        lastPos = src.length();  
                    } else {  
                        tmp.append(src.substring(lastPos, pos));  
                        lastPos = pos;  
                    }  
                }  
            }  
            return tmp.toString();  
        }  

    /**
    * @disc 对字符串重新编码
    * @param src
    * @return
    */
    public static String isoToGB(String src) {
       String strRet = null;
       try {
        strRet = new String(src.getBytes("ISO_8859_1"), "GB2312");
       } catch (Exception e) {

       }
       return strRet;
    }

    /**
    * @disc 对字符串重新编码
    * @param src
    * @return
    */
    public static String isoToUTF(String src) {
       String strRet = null;
       try {
        strRet = new String(src.getBytes("ISO_8859_1"), "UTF-8");
       } catch (Exception e) {

       }
       return strRet;
    }


        public static void main(String[] args) {  
            String tmp = "中文";  
            System.out.println("testing escape : " + tmp);  
            tmp = escape(tmp);  
            System.out.println(tmp);  
            System.out.println("testing unescape :" + tmp);  
            System.out.println(unescape("%u6211%u4eec"));  
        }   

          当通过js使用escape()函数来转码url中的中文时,如果服务器端接受不到该中文参数,就改用encodeURI()函数来代替escape()函数。

  • 相关阅读:
    利用windows 127.0.0.1:30000 代理在linux下工作
    nginx与ssh 把内网转为公网开发服务器
    php errorlog 记录
    dockerfile php 开发
    ubuntu
    k8s 1.9.1 centos7 install 离线安装
    kubernetes
    linux字符设备驱动--基本知识介绍
    linux应用程序设计--Makefile工程管理
    linux应用程序设计--GDB调试
  • 原文地址:https://www.cnblogs.com/pricks/p/1555887.html
Copyright © 2011-2022 走看看