感觉乱码产生的场合好像不完全一样,有的是jsp页面编译时产生的,有的是页面间数据传输导致的,不知这些都能通过过滤器消除吗?

解决方案 »

  1.   

    只能解决请求响应时的编码,基本上可以说是数据传输造成的,仅对于POST方式的有用,对于GET方式的无效。Java Web应用中的乱码主要产生在以下几个方面和基本的解决方法:1,页面乱码
    默认为ISO8859-1,通过@page指令解决。
    2,请求响应乱码
    请求/响应的编码默认为ISO8859-1,通过过滤器设置request和response的
    setCharacterEncoding方法来解决。
    3,数据库乱码(以数据库的客户端默认编码)
    对于Oracle和SQL Server没有什么问题,对于MySQL可以在连接字符串后面加上
    ?useUnicode=true&characterEncoding=gb2312来解决,或者修改my.ini的
    MySQL参数文件。
    4,URL参数乱码
    默认为ISO8859-1,这个最为麻烦,如果使用Tomcat,需要修改server.xml,把
    其中的两个Connector元素加上URIEncoding="gb2312"属性,对于Firefox这就
    可以了,但是对于IE这还不够,需要手工将中文字符使用URLEncoder.encode方法
    转为URL编码,就是采用%XX%XX%XX这样的格式。总之Java Web开发的过程就是与乱码不断进行斗争的过程。
      

  2.   

    谢谢楼上的详细回答,我现在遇到的问题可能多半属于你说的第一种。
    我的@page一般写成:<%@ page pageEncoding="GBK" contentType="text/html;charset=gb2312"%>
    问题多出在charset上,有的网页必须把charset设为GBK才行,更奇怪的是有的网页改为GBK后好了一阵又变成乱码,又得重新改回gb2312,来回折腾,不知何故?连静态部分都一会儿正常一会儿乱码,这是什么原因?
      

  3.   

    pageEncoding="GBK" 这个编码一般不用去设置的,这个是以何种字符集来编译成Servlet的编码格式。你的问题好像挺奇怪的,GBK的字符集要比GB2312多,并且是兼容GB2312的,
    一般不会出现GBK和GB2312互换而变成乱码的。
      

  4.   

    那麻烦你再解释一下静态页面为什么也会出现乱码?怎么解决?
    难道是应用服务器tomcat的问题?可我已经在connector标签里加了URIEncoding="GBK"啊
      

  5.   

    静态页面,就是HTML也会出现乱码?