最佳答案
你的文件保存的时候的编码是什么?中文操作系统,会把文件默认保存成ANSI编码。
通常我们会用utf-8编码。在保存文件的时候,也保存成utf-8编码。
你用写字板打开这个文件,另存一下成utf-8编码,再把其它地方的编码设置都调整成utf-8试试。
追问:
整个项目用的是GBK编码,中文操作系统的编码是GBK吧,因为项目是大家一起开发的,所以我用的也是GBK编码,改成utf-8的话,恐怕不太方便。
追答:
链接里的中文有编码没?你post方式传参是正常的话,那get的话应该也是可以的。区别就是你get这边,这个a标签的href参数有没有被编过码
追答:
以前写过一个函数,给你参考一下:public static String encodeURL(String str, String encoding) { final char splitter = "/"; try { StringBuilder sb = new StringBuilder(2 * str.length()); int start = 0; for (int i = 0; i < str.length(); i++) { if (str.charAt(i) == splitter) { sb.append(URLEncoder.encode(str.substring(start, i), encoding)); sb.append(splitter); start = i + 1; } } if (start < str.length()) sb.append(URLEncoder.encode(str.substring(start), encoding)); return sb.toString(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return null; }
追问:
你是说给href上设置编码?是控件写好的,我改不了里面的a标签,我只看到有个tr td之类的
这段就是下面的分页页码了,追问:
我代码怎么没了呢,???
追问:
这会有了,还有延迟效果,我。。。。
追答:
给你找了个文章,你看看http://www.cnblogs.com/soundcode/p/6290472.html你链接地址里这样显示为中文,肯定是不对的。基本思路就是需要解决,你这个分页链接这里的编码。
追问:
我试了试打给方法,String coopname=request.getParameter("coopname");if(coopname!=null && !coopname.equals("")){String ss= encodeURL(coopname,"GBK");System.out.println("ss "+ss);}最后输出的是:ss %3F%3F%3F%3F
追答:
那就对了,你链接里的中文应该是这样编码好的字符,然后在服务端接收的时候,再decode回来,就是正常的中文了
追问:
对这个ss再decode吗?
追答:
我的意思是,你的链接应该是这个样子的,2那么你在服务端,接收的spname参数就应该是你编码了这个字符串,对这个参数进行解码
追答:
2
追答:
href="/spmanager/excelListAction.do?spname=旭升&method=findAll&startday=&endday=&page=2" title="1"
追答:
spname=%3F%3F%3F%3F
追答:
我的意思是,你的链接应该是这个样子的href="/spmanager/excelListAction.do?spname=%3F%3F%3F%3F&method=findAll&startday=&endday=&page=2" ,那么你在服务端,接收的spname参数就应该是你编码了这个字符串,对这个参数进行解码
追问:
我应该没有写代码编码这个字符串的,是哪里有设置吗?可以让他不编码吗,如果他非要编码的话,我后台再解码行吗?
追答:
中文不编码get过去肯定是乱码的啊,所以前端这里的链接地址一定是需要编码的;然后提交到后台以后,再对获取到的参数进行解码;就可以正常获取到中文了。
追问:
然后问题来了,我常用的解码方式解码之后,有的是????,有的是%3F%3F%3F%3F,我得不到中文。。(55555)
追答:
你怎么编得码?后台接收到了什么?怎么解的码?发出来看看
追问:
不做处理的话,直接String coopname=request.getParameter("coopname");是 -????用大哥给的方法处理之后encodeURL(coopname, “GBK”) { } 是: %3F%3F%3F%3F
追问:
String dd=new String(coopname.getBytes("ISO-8859-1"),"GBK");用这种方式转码的话,get没问题了dd变量是我想要的中文,但当我post提交也进入这个方法的话,用这个处理过的dd就乱码。我需要的,应该是一个兼容post get乱码的编码或者解码的。。。。
追答:
那你前端这边进行一下编码啊,就是你的a标签的href的spname参数
追问:
那是控件里面写好的,我改不了(555555)
追答:
你可以看到控件里是怎么处理的吗?估计是你们写控件的人没有处理这里的编码问题。跟写控件的人提出这个问题,让他们处理一下编码的问题就是了。通常来说,链接地址里也不会去写中文所谓参数。
追答:
或者你这里不要用这个中文名称做参数,用id或者编号作为参数
追答:
然后你就修改一下服务器这边的查询方法就是了
追问:
这个控件很多功能模块用到的,就我这个不行,传中文就是乱码,我服了
追答:
呵呵,因为压根就没想过要传中文啊!通常这样的分页查询的地方,我们都是按照id或者编号来的,谁想到你用中文名称来查啊?!
追答:
搞定了没?
追问:
在后台判断了是get还是post提交,get转码,post不转码,目前,这样是看起来搞定了,谢谢你哦
最佳答案由网友 Bin_H_ 提供