论坛首页 入门技术论坛

web应用中post方式的编码问题讨论(非要用filter吗?)

浏览 2131 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-11-24   最后修改:2008-11-24
问题概况:页面上表单中的中文数据在添加和修改操作时候都出现乱码(post方式)。

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里面还有别处需要设置吗?

希望大家讨论下,我理解错误的地方还请指正。
  • 大小: 6.8 KB
   发表时间:2008-11-24  
如果客户端已经是UTF8, 那么, 传输是没有问题, 有问题的是读参数的时候, 那时候系统需要知道, 进来的流是什么编码.
0 请登录后投票
   发表时间:2008-11-25  
sdh5724 写道

如果客户端已经是UTF8, 那么, 传输是没有问题, 有问题的是读参数的时候, 那时候系统需要知道, 进来的流是什么编码.

如果我不设置Filter的话,数据就会用iso8859-1的编码形式进入ActionForm了,需要这样new String(str.getBytes("iso8859-1"),"utf-8")才能在set方法处显示中文,我主要还是怀疑是tomcat设置问题,感觉是tomcat这层仍然用的iso8859-1对数据进行了encoding.
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics