我以前遇到这类问题的时候写的,你可以参考一下:
一.中文乱码产生的原因
a)乱码有很多种,这里所说的是指web传入的乱码,即由浏览器传输数据到服务器发生的乱码。
b)常用的web传输方法有 post 和 get 2种,下面分别说明:
i. Post – 由于采用了特殊的加密,所以只要设置正确的Character Encoding即可,不会产生乱码
ii. Get - 用此类方法传输的数据将以字符串的形式直接放在url后面,所以采用的是url
的encode,这种情况不仅会出现中文乱码,而且假如参数里面带有保留字符也将被转义,特别地,如果参数中带有&字符,将丢失后面的所有参数或
者值
二.解决办法
解决中文乱码(应该说是数据传输问题),主要应该从用法上解决。上面说了post方法只要设置了正确的Character
Encoding,是不会产生乱码的,所以应尽量采用post方法来传输数据;但是有时候采用get方法是比较方便的,或者是必须的,所以下面也分别介绍
2种的对应解决方案:
a) Post – 在web.xml设置filter,filter-class指定为平台的SetCharacterEncodingFilter类,encoding设置为页面使用的编码,示例:
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>
//自己实现一个filter。。
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
b) Get – 解决的关键在于在传输之前调用url encoder对参数进行加密,采用的encoding应与服务器的encoding一致,这样接收到数据的时候可以不做任何的转码。可由java和javascript2种办法实现:
i. Java 实现方法(推荐)
1. 条件 - 如果要传输的数据是要先经过javabean生成,然后write 到页面上的,可以采用这种方式。以下略,用java.net.URLEncoder.encode();
ii. Javascript 实现方法
如果需要从页面获取输入,则可以采用这种方式,但是这种情况又可以考虑是否可以转换为post方法来传输。
下面是javascript的encode函数:
1. escape - 采用ISO Latin字符集对指定的字符串进行编码。不会被此方法编码的字符: @ * / +
2. encodeURI - 把URI字符串采用UTF-8编码格式转化成escape格式的字符串不会被此方法编码的字符:! @ # $& * ( ) = : / ; ? + '
3. encodeURIComponent - 把URI字符串采用UTF-8编码格式转化成escape格式的字符串。不会被此方法编码的字符:! * ( ) '
posted on 2008-07-11 15:12
无声 阅读(449)
评论(0) 编辑 收藏 所属分类:
职场生活