关于URL传参中出现乱码的解决办法

  前些天生产实习,在做完一个B/S航空订票系统后,老师要求将该订票系统的查询功能移植到android应用中,实现android平台上对数据库进行访问查询航班信息的一个功能。

起初的进度很顺利,但是只能进行无条件的查询,对于一个航班查询系统来说,这样单一的功能无疑是一个缺陷,作为查询系统,必须能够根据用户的意愿,来进行不同条件的查询,而这个功能的实现就需要一个条件提交到服务器,然后根据条件查询出数据并返回到android应用中在屏幕显示。

  因为属于刚刚接触android应用开发,完全属于菜鸟级的,所以一些android平台的表单提交并不懂,所以我就想到了将条件附加在URL后边,通过get方式将条件传递到服务器。

首先通过android的对象Intent.putExtra()方法,将参数从查询的Activity传递到进行数据访问的Activity,代码如下:

          Intent intent = new Intent();
                intent.putExtra("fromw", fromw);
                intent.putExtra("tow", tow);               
                intent.setClass(searchActivity.this,MainActivity.class);
                startActivity(intent);

然后在接受页面将参数接收,代码如下:

     Intent intent=this.getIntent();
        String fromw=intent.getStringExtra("fromw");
        String tow=intent.getStringExtra("tow");

到这里都可以实现,中文完全可以接收到,但是在加在url后边传递到服务器的时候问题就出现了,无论使用getBytes()还是配置服务器的urlEncoding,都不可以接收到正确的中文参数,接收到的都是??,找了老师解决也没有解决,后来上网找资料,发现一种方法,就是在传送参数前,对URL进行编码。因为每个浏览器默认url传递参数的字符集都是不同的,有的是ISO-8859-1有的则是UTF-8,这样在传递时,各浏览器传参字符集不同,传来传去就不一定把参数转换为什么类型了,所以我只要在传参数之前给他编码,确定传递字符集,(这里要注意,设置的字符集必须和服务器解析的字符集相同,之前也提到设置服务器URLEncoding,这里我均设置为UTF-8)然后服务器在接收时就会按之前设置好的utf-8字符集解析url的字符串,因为我设置的是两个字符集相同,所以他肯定能够正确解析出来,所以我做的工作就是设置URLEncoder.encode("","utf-8");

try {
            codefrom=URLEncoder.encode(fromw, "utf-8");
            codeto=URLEncoder.encode(tow, "utf-8");
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

这样,把设置好字符集的URL后参数(codefromw和codetow)拼接到url后,就可以完成中文参数的正确传递。

 String url="http://169.254.134.46:8080/Team_10/servlet/QueryTicketForAndroid.do";
        if(!"".equals(fromw)){
            url+="?fromw="+codefrom;
        }
        if(!"".equals(tow)&&!"".equals(fromw)){
            url+="&tow="+codeto;
        }else if(!"".equals(tow)&&"".equals(fromw)){
            url+="?tow="+codeto;           
        }

这个判断语句可以实现单个或者两个条件均能传递并且正确拼接的功能,也许有更好的方法,希望各位高手给予意见。

这样经过测试,一次成功!中文传参完全没问题!

                        --------------欢迎转载和指导,但是请注明出处和作者,谢谢

原文地址:https://www.cnblogs.com/mecca/p/3343862.html