java 字符流 乱码_java字符流乱码_Java 编码字符 乱码处理

最佳答案

你的文件保存的时候的编码是什么?中文操作系统,会把文件默认保存成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_  提供

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值