同样的汉字,在服务器和本地的电脑上URLencode 出来的结果不一致

Java 代码 同样的汉字,但是我在服务器和自己的电脑上encode了一下发现结果不一致,这是由于什么原因造成的呢?

操作系统设置的代码页不同,导致编码不同

你本地应该是windows,默认是GBK。服务器应该是linux,默认是UTF-8。

字符串的编码问题;

         String oldStr = new String("中文字符");  //我的环境默认UTF-8
        System.out.println(URLEncoder.encode(oldStr));
        try {
            String newStr = new String(oldStr.getBytes(), "gb2312");
            System.out.println(URLEncoder.encode(newStr));
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }  

输出:
%E4%B8%AD%E6%96%87%E5%AD%97%E7%AC%A6
%E6%B6%93%EF%BF%BD%EF%BF%BD%EF%BF%BD%E7%80%9B%EF%BF%BD%E7%BB%97%EF%BF%BD

UTF-8的才是正确的。

        String oldStr = new String("中文字符");
        try {
            System.out.println(URLEncoder.encode(oldStr, "utf-8"));
            System.out.println(URLEncoder.encode(oldStr, "gb2312"));
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

进一步整理,请参考:http://blog.csdn.net/testcs_dn/article/details/53982044

这里以IE10浏览器为例,浏览器按照UTF-8编码后,Tomcat的字符集为ISO8859-1将浏览编码之后的结果进行解码,因为解码之后不支持中文,所以会出现??

不止是你操作编码的问题,还跟你使用的解密方式有问题,比如js的话,建议用encodeURIComponent ,具体参照:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

配置服务器server.xml 端口编码为utf-8具体自行百度