jsp页面设置了编码<%@page contentType="text/html; charset=utf-8"%>
在Action方法里面获得request的Parmater参数。
使用IE的时候下面的代码能输出正确汉字
String param = (String) request.getParameter("param");
param = new String(param.getBytes("ISO8859-1"));
System.out.println("param="+param);
使用火狐的时候,第二行必须改成
param = new String(param.getBytes("ISO8859-1"), "UTF-8");
才能输出正确汉字。
求分析原因,谢谢!
在Action方法里面获得request的Parmater参数。
使用IE的时候下面的代码能输出正确汉字
String param = (String) request.getParameter("param");
param = new String(param.getBytes("ISO8859-1"));
System.out.println("param="+param);
使用火狐的时候,第二行必须改成
param = new String(param.getBytes("ISO8859-1"), "UTF-8");
才能输出正确汉字。
求分析原因,谢谢!
用IE输出:param=安仁
用火狐输出:param=瀹変粊
然后尝试取消所有转码:
String param = (String) request.getParameter("param");
System.out.println("param="+param);
在request.getParameter()
param = new String(param.getBytes("ISO8859-1"), "UTF-8");
才能正常输出
param = new String(param.getBytes("ISO8859-1"));
System.out.println("param="+param) 1、你这个就等于说你没设置编码,看jdk的API帮助文档String
public String(byte[] bytes)通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的 String。新 String 的长度是字符集的函数,因此可能不等于 byte 数组的长度。
当给定 byte 在给定字符集中无效的情况下,此构造方法的行为没有指定。如果需要对解码过程进行更多控制,则应该使用 CharsetDecoder 类。
参数:
bytes - 要解码为字符的 byte
从以下版本开始:
JDK1.1 平台默认字符指什么呢?你看看两个浏览器,默认编码肯定是不一样的。所以导致不一样的结果。
2、你这个第一个做法就是不对的,你知道你getByte意味着什么吗,意味着重新组织,就算服务端统一设置过编码了 也没有用的,你getbyte后必须设置你的统一编码,你没设置,所以你的做法就是错的。跟这那都没关系。希望能帮到你个人技术博客:http://www.happyalaric.com
‘
js里面用encodeURIComponent把传递的参数转了一下码,
然后在java类中再转一次码
String param = (String) request.getParameter("param");
param = new String(param.getBytes("ISO8859-1"), "UTF-8");
这样IE和火狐都能正常输出了。
但是我仍然不明白之前出现的问题的原因,能帮忙解释下吗,谢谢了!
使用 <form>...</form> 提交的,浏览器会自动编码一次.
ajax 或者Get方式提交的,需要自己手动编码。而encodeURIComponent 使用的是 UTF-8 编码规则来编的.
是用的ajax,以GET方式传递参数。
问题解决了,原因自己理了一下。
谢谢大家了!!