2 qq 34696943 qq_34696943 于 2017.01.02 20:20 提问

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

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

9个回答

LD0807
LD0807   2017.01.02 20:22

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

testcs_dn
testcs_dn   Rxr 2017.01.02 20:28

字符串的编码问题;

         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

testcs_dn
testcs_dn   Rxr 2017.01.02 20:35

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();
        }

testcs_dn
testcs_dn   Rxr 2017.01.02 21:49
gxl_1314520
gxl_1314520   2017.01.02 22:21

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

JE_GE
JE_GE   2017.01.02 22:41

服务器和本地jdk版本不一致

caozhy
caozhy   Ds   Rxr 2017.01.02 20:17

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

shijing266
shijing266   2017.01.03 10:00

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

qq_35735823
qq_35735823   2017.01.03 13:05

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!