浏览 2150 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-11-24
最后修改:2008-11-24
struts应用中,在页面发出请求后,数据到达Action的时候已经变成乱码。这表示数据在到达Action之前已经有问题了,因为那些中文数据是用的ActionForm中的一个属性对应的,所以我们把目光转移到ActionForm中该属性的set方法处。经过验证,ActionForm中的set方法接受的数据也是乱码。由此看来,这乱码是html数据的编码问题了?但是不应该啊。 我的环境设置如下: 1、整个工程文件都是采用utf-8编码。 2、jsp页面中也设置了编码:(以下2种方式都试过) <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <%@page pageEncoding="utf-8" contentType="text/html; charset=utf-8" %> 3、在tomcat(6.0.16)的server.xml文件中我也做了如下设置: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="utf-8" useBodyEncodingForURI="true"/> 当然,eclipse(3.4)中有tomcat的server.xml运行副本(我这样理解的),一并修改之。为了确保设置有效性,特意查看了运行目录(****\For3.4\.metadata\.plugins\org.eclipse.wst.server.core\tmp0)里面相应位置的server.xml,设置也没有问题。 4、IE设置如下:(据说是此设置只影响到get方式,但是这里我也设置了下,如果不设置,根据你的OS默认来定) 思路:浏览器(我是IE6.0)把中文数据用指定的utf-8方式发送数据到servlet容器,servlet容器用指定的utf-8进行编码解码?那就不应该会有乱码啊?现实是乱码依旧,我查了些资料(google就是好啊),发现ActionForm接受的中文数据是iso8859-1编码,之后设置一个Filter进行转码:request.setCharacterEncoding("utf-8");使其数据进入servlet容器之前指定encode方式,此时ActionForm能正常接受utf-8编码的中文数据了,问题暂时解决。 我的问题就是中文数据经过client传输到server过程中对数据进行了encode为"iso8859-1"?网络只能传输2进制的1010..这样的数据,难道要转为2进制数据流非得用"iso8859-1"编码?还是我那样设置tomcat根本没设置对,tomcat里面还有别处需要设置吗? 希望大家讨论下,我理解错误的地方还请指正。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-11-24
如果客户端已经是UTF8, 那么, 传输是没有问题, 有问题的是读参数的时候, 那时候系统需要知道, 进来的流是什么编码.
|
|
返回顶楼 | |
发表时间:2008-11-25
sdh5724 写道 如果客户端已经是UTF8, 那么, 传输是没有问题, 有问题的是读参数的时候, 那时候系统需要知道, 进来的流是什么编码. 如果我不设置Filter的话,数据就会用iso8859-1的编码形式进入ActionForm了,需要这样new String(str.getBytes("iso8859-1"),"utf-8")才能在set方法处显示中文,我主要还是怀疑是tomcat设置问题,感觉是tomcat这层仍然用的iso8859-1对数据进行了encoding. |
|
返回顶楼 | |