6
回答
get提交url中的中文乱码处理,后台用hashmap可以解决?
开发十年,就只剩下这套Java开发体系了   

如题:排除其余方法,只讨论该方法

代码大概如:  String url = request.getQueryString();

                   String[] arr1=url.split("&");

                    Map para = new HashMap();       

                     for(int i = 0;i<arr1.length;i++){

                             String[] arr2=arr1[i].split("=");

                            for(int j = 0;j<arr2.length;j++){

                                para.put(arr2[0],arr2[1])

                             }

                       }

             如果get请求的url里有   &address=上海&tel=13223232288…………

             提交后地址栏为  &address=%E%A%Q%T%&tel=13223232288

              后台对getQueryString中取出address值,用getParameter("address");取出的为乱码,可是如果对getQueryString做以上的map处理,然后para.get("address") 就能正常取出汉字;

             小弟愚钝,突然看到代码有这么一段处理,拿出来问问,  具体的原理求解释?写错了勿喷;             

<无标签>
举报
共有6个答案 最后回答: 6年前

由于客户端对http get url的编码方式与tomcat中定义的URIEncoding不一致,导致tomcat服务器利用另一种解码方式来解码客户端的url,这样必然会出现乱码现象。而放入Map中的字符串为什么没有出现乱码?原因就在于getQueryString()没有对客户端的url进行decode,保留了原有的客户端编码utf-8,所以在后面的使用过程中,如果使用utf-8对其解码,就不会出现乱码。具体的可参考http://my.oschina.net/gschen/blog/120553,文中有对该情况的详细描述,谢谢。

引用来自“justin_cn”的答案

由于客户端对http get url的编码方式与tomcat中定义的URIEncoding不一致,导致tomcat服务器利用另一种解码方式来解码客户端的url,这样必然会出现乱码现象。而放入Map中的字符串为什么没有出现乱码?原因就在于getQueryString()没有对客户端的url进行decode,保留了原有的客户端编码utf-8,所以在后面的使用过程中,如果使用utf-8对其解码,就不会出现乱码。具体的可参考http://my.oschina.net/gschen/blog/120553,文中有对该情况的详细描述,谢谢。

谢谢兄台!太给力了,我那个map处理前已经对url做了decode处理,是我忘了这一段代码,不过能引出您这么透彻的分析,值了

引用来自“0o清风徐来o0”的答案

引用来自“justin_cn”的答案

由于客户端对http get url的编码方式与tomcat中定义的URIEncoding不一致,导致tomcat服务器利用另一种解码方式来解码客户端的url,这样必然会出现乱码现象。而放入Map中的字符串为什么没有出现乱码?原因就在于getQueryString()没有对客户端的url进行decode,保留了原有的客户端编码utf-8,所以在后面的使用过程中,如果使用utf-8对其解码,就不会出现乱码。具体的可参考http://my.oschina.net/gschen/blog/120553,文中有对该情况的详细描述,谢谢。

谢谢兄台!太给力了,我那个map处理前已经对url做了decode处理,是我忘了这一段代码,不过能引出您这么透彻的分析,值了
不客气,我所做的分析只是一些皮毛,还多太多需要改进的地方,有些地方还是不够严谨。
顶部