日期:2014-05-17  浏览次数:20915 次

求解一个字符编码问题,IE和火狐的输出结果不同
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");
才能输出正确汉字。
求分析原因,谢谢!

------解决方案--------------------
本质原因不是出在浏览器,你把Tomcat的URL编码设置下,然后试试看:

conf\server.xml

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8"/>
------解决方案--------------------
同意楼上,
------解决方案--------------------
火狐工具栏中

查看--》字符编码

看看设置有无问题
------解决方案--------------------
探讨
试过了 还是一样的结果
用IE输出:param=安仁
用火狐输出:para……

------解决方案--------------------
编码是很烦的,尽量统一编码吧
------解决方案--------------------
先request.setCharacterEncoding()
在request.getParameter()
------解决方案--------------------
URL 用js encodeURIComponent 转一下
------解决方案--------------------
要知道本质,
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



------解决方案--------------------
以前遇到过这个问题。原因不是特别清楚。

以下来自网络:貌似有道理
使用 <form>...</form> 提交的,浏览器会自动编码一次.
ajax 或者Get方式提交的,需要自己手动编码。而encodeURIComponent 使用的是 UTF-8 编码规则来编的.


相关资料更多>