文件1:formtest.jsp
<%@ page language="java" contentType="text/html; charset=gb2312"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<% response.setCharacterEncoding("gb2312"); %>
<form action="form1.jsp" method="post">
<input type="text" name="chartest">
<input type="submit" name="提交" value="提交">
</form></body>
</html>
文件2:form1.jsp
<%@ page language="java" contentType="text/html; charset=GB2312"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<%
String str=request.getParameter("chartest");
out.println("chartest值是:"+str+"<br>");
out.println("str的长度:"+str.length());
for(int i=0;i<str.length();i++){
out.println(Integer.toHexString((int)(str.charAt(i))));
}
%>
</body>
</html>
问题:
我以“中国”做为输入,可打印出来是:
chartest值是:???ú(这的乱码不知道在这显示的什么)
str的长度:4 d6 d0 b9 fa 
这样的显示。
我就想不明白:编码的值正确,也是用GB2312解析的,可打印出来的怎么是乱码?
另外还有一个eclipse的问题:<%@ page language="java" contentType="text/html; charset=GB2312"%>
把这句去了,eclipse就不能保存,它默认是以iso-8859-1进行文件编码,怎么改一下?
先谢了!!!

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【craboy1】截止到2008-08-01 11:43:42的历史汇总数据(不包括此帖):
    发帖的总数量:0                        发帖的总分数:0                        每贴平均分数:0                        
    回帖的总数量:0                        得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:0                        结贴的总分数:0                        
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:---------------------结分的百分比:---------------------
    无满意结贴率:---------------------无满意结分率:---------------------
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html

    取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=craboy1
      

  2.   

    <%@ page language="java" contentType="text/html; charset=gb2312"%> 
    这个再加一句
    <%@ page language="java" contentType="text/html; charset=gb2312" pageEncoding="gb18030"%> 
    呵呵,你没有设置页面的编码格式,使用gb18030;gbk;gb2312都可以.
      

  3.   

    谢谢你了!
    还是乱码,另外两句全加会出现错误。只加你那句也不好使,改了pageEncoding="gb2312"好不好使!
      

  4.   


    <%@ page language="java" contentType="text/html; charset=GB2312" pageEncoding="gb2312"%> 
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
    <html> 
    <head> 
    <title>Insert title here </title> 
    </head> 
    <body> 
    <% 
    String str=request.getParameter("chartest"); 
    str=new String(str.getBytes("ISO8859-1"),"gb2312");
    out.println("chartest值是:"+str+" <br>"); 
    out.println("str的长度:"+str.length()); 
    for(int i=0;i <str.length();i++){ 
    out.println(Integer.toHexString((int)(str.charAt(i)))); 

    %> 
    </body> 
    </html> 
      

  5.   

    <%@ page language="java" contentType="text/html; charset=gb18030" pageEncoding="gb18030"%> 然后在你的开发工具里再进行一下设置,你用的是eclipse吗?
      

  6.   

    str=new String(str.getBytes("ISO8859-1"),"gb2312");
    加上这句...
      

  7.   

    或者你也可以在你的tomcat的server.xml中设置,  <Connector 
    port="8888"               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                   enableLookups="false" redirectPort="8443" acceptCount="100"
                   debug="0" connectionTimeout="20000" 
                   disableUploadTimeout="true" URIEncoding="设置字符级"/>
      

  8.   

    这里设置的是访问时uri地址的编码...
    设置完之后如果还是不行的话不妨试试重启容器
      

  9.   

    谢谢大家
    加了这句str=new String(str.getBytes("ISO8859-1"),"gb2312");可以了。
      

  10.   

    难道你所有的string都要这样重新编码么?
      

  11.   

    楼主,长久考虑,应该使用过滤器
    最少也不应该使用str.getBytes("ISO8859-1"),"gb2312");这样太有点不灵活了,呵呵....
    给你的建议海是去google一下过滤器的使用吧.
      

  12.   

    str=new String(str.getBytes("ISO8859-1"),"gb2312"); 进行转换
      

  13.   


    String str=request.getParameter("chartest"); 
    这个段代码前加上
    request.setCharacterEncoding("GB2312")
    试试。
      

  14.   

    加过滤器是最好的办法,可以避免大部分的乱码问题,网上有很多例子
    一般来说,由JavaBean向jsp页面传值不会出问题,jsp向jsp传值会出问题
    如果页面不是很多,可以在页面使用request.setCharacterEncoding("GB2312") 肯定可以,然后在getParameter就可以了
    如果你用Struts,一般都是action传递到jsp,不会出现乱码问题,可以试试
      

  15.   


    只要出现乱码,通过这段代码还解决不了的话pageEncoding="gb18030"用下面这个就一定行
    str = new string(getBytes("iso8859-1"));
      

  16.   

    真是好网站,自己结个贴。
    虽然只是一个页面传递,可是经过好几次转换
    1 GB2312->2 ISO9985-1-> 3 unicode->4 GB2312
    1是输入数据的<form>页面
    2是使用getParameter方法的页面,所以WEB引擎会以默认的ISO8859-1解码。GB2312变成ISO9985-1只是在每个字节前加0,也可说是无损的,加一句new String(str.getBytes("ISO8859-1"),"gb2312")可以解决这个问题。 
    3JVM只支持unicode,所以处理的字符(中文或本地化的字符)会转化成unicode,
    4最后转换成页面的能处理的代码GB2312