在JSP 页面 中 为什么 request.setCharacterEncoding(“GBK”) 解决乱码 有时候不管用,                     必须使用String newdefrayItem = new String(request.getParameter("newdefrayItem").getBytes("iso-8859-1"),"GBK");这样可以。在使用URL进行传递参数时 ,就必须使用String newdefrayItem = new String(request.getParameter("newdefrayItem").getBytes("iso-8859-1"),"GBK");代码如下:<a href="a.jsp?name=张三&sex=男">张三</a>
在获取时 代码如下:
   
   jsp代码:
   <%
        //request.setCharacterEncoding(“GBK”); 这种方法设置编码时,在这里会产生乱码
        
       //使用以下方式 进行编码,就不会出现乱码,请问这两种 设置编码方式 有什么去区别??
       String s=new String((request.getParameter("name")).getBytes("ISO-8859-1"),"GBK");
   %>

解决方案 »

  1.   

    request.setCharacterEncoding 用来指定对客户端浏览器发送来的数据进行解码
    从你这条语句看
    String s=new String((request.getParameter("name")).getBytes("ISO-8859-1"),"GBK");
    发送的参数是用ISO-8859-1编码的,这时,你再指定request.setCharacterEncoding(“GBK”),等于是用GBK去解码ISO-8859-1,所以可能会出乱码了.在JSP头部加上 contentType="text/html; charset=GBK" 
      

  2.   

    另外,通过url传参,默认用ISO-8859-1编码的.所有用
    String s=new String((request.getParameter("name")).getBytes("ISO-8859-1"),"GBK");
    可以得到正常的中文.要修改URL传参的编码方式,可以修改tomcat server.xml配置文件, 在Connector结点下,加URIEncoding ="GBK" 试试. 意思是修改所有get方式提交 对参数用GBK编码.
      

  3.   

    建议 数据库 页面 项目 统一编码utf-8 
    这样不容易出错 
    乱码问题 一直解决不完呀
      

  4.   


    请问,在使用URL进行传参时是采用GET提交方式, 如果我要设置通过GET提交的请求信息,在获取请求信息时应该怎么设置编码方式,有时候rquest.setCharacterEncoding("GBK")还想不管用??
      

  5.   

    有时候不管用是不是意味着这个有时候的情形比较特殊一点?能说说只有这样才可以的情况下String newdefrayItem = new String(request.getParameter("newdefrayItem").getBytes("iso-8859-1"),"GBK");参数newdefrayItem原先是什么值呢?按理GBK是兼容iso-8859-1的,所以这里肯定有其它问题。
      

  6.   

       应该是服务器的编码你没有配置  
       如果是tomcat 在Connector结点下 useBodyEncodingForURI="true" URIEncoding="GBK"
       如果是apache+tomcat(AJP方式)<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"  useBodyEncodingForURI="true" URIEncoding="GBK" />
            
      

  7.   


    楼主没明白我说的意思,rquest.setCharacterEncoding("GBK")是对客户端传过来的参数按GBK解码,但客户端是按ISO8859-1编码的。所以中文按ISO8859-1编码肯定就是乱码了。所以要修改get方式传参的编码方式,按GBK编码。方法就是3楼的。
      

  8.   


    那如果我采用POST提交方式,哪 编码方式是按什么编码啊?是不是按页面的编码??
    <%@ page language="java" import="java.util.*" pageEncoding="GBK"%>在线等。。在线等。
      

  9.   


    您看看 我这样理解 对吗?在使用post提交时,按页面编码
    <%@ page language="java" import="java.util.*" pageEncoding="GBK"%> 所以在 在设置post提交方式的编码时,也就是:request.setCharacterEncoding("GBK") 对客户端的请求信息按“GBK”进行解码,这时客户端的请求信息 也是“GBK”编码, 所以解码成功,因为客户端的请求信息是用的“GBK”编码,在设置请求信息的编码时,可以设置成功,因为两个都是GBK的编码方式。同理可得,在使用GET提交时,是按"ISO-8859-1"编码方式
    在设置请求信息的编码方式时,如果把"ISO-8859-1"的编码 按"GBK"编码 则肯定会出现编码错误!
    这是,必须是使用
    String s=new String((request.getParameter("name")).getBytes("ISO-8859-1"),"GBK");
    把"ISO-8859-1"的编码 转换为“GBK” 编码!!您看我这样总结的对吗??
      

  10.   

    get时候是这样
    因为中文字符无法在URL中明文传输,只能代之以ASCII字符之类的因此将中文字符转化为ASCII字符
    String name = new String(chineseCharacters.getBytes("GBK"), "ISO-8859-1");逆过程就是:
    String s=new String((request.getParameter("name")).getBytes("ISO-8859-1"),"GBK");