回 帖 发 新 帖 刷新版面

主题:JSP页面传值出现乱码问题?

我用HTML页面向一个JSP页面传值的时候,汉字传到JSP页面接收的全变成了乱码,我用了很多字符类型转换的方法都没有用,请高手指点,我用的页面都是UTF-8的.





HTML页面

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>TextAbout.html</title>
    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

  </head>
  
  <body>
  <form action="TextAboutDo.jsp" method="post" enctype="multipart/form-data" name="addText">
   <div> 中文输入</div>
    <textarea name="context1_ch" rows="8" cols="30"></textarea>
    <div>英文输入</div>
    <textarea name="context1_en" rows="8" cols="30"></textarea><br>
    <input type="submit" name="Upload" value="提交" /> &nbsp;&nbsp;
    <input type="reset" value="取消">
    
    </form>
  </body>
</html>







JSP页面



<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"
     import="com.jspsmart.upload.*"
     import="com.ecommentsgraphic.datamodel.Aoubts"
     import="com.ecommentsgraphic.web.AoubtsBean"
     import="com.ecommentsgraphic.dal.index.Impl.IndexLoadDalImpl"
     import="java.util.List"
     import="com.ecommentsgraphic.dal.index.Impl.IndexDalImpl"
     import="com.test.Str"
     %>

<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'TextAboutDo.jsp' starting page</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>
  
  <body>
  
    <%
      SmartUpload su = new SmartUpload();
      su.initialize(pageContext);
      su.upload();
      IndexLoadDalImpl indexLoadDal = new IndexLoadDalImpl();
      List list =(List) indexLoadDal.LoadIndexAoubts("from Aoubts");
      Aoubts aoub=(Aoubts) list.get(0);
      String context1 = su.getRequest().getParameter("context1_ch");
      String context2 = su.getRequest().getParameter("context1_en");
      
       
      out.println(context1);
      out.println(context2);

      

    %>
    <center><br><br><br>

     </center>
  </body>
</html>

回复列表 (共6个回复)

沙发

你把编码改为GBK 或 改gb2132 看看。。

板凳

你的第一个HTML页面用UTF-8编码好像就不能正常显示中文吧。。

3 楼

我不能改成GBK或GB2312,因为整个工程都是用UTF-8的,其实我改了也是错的,我的第一个页面UTF-8有问题吗??错在什么地方了啊,我重新用JSP做了一个相同的页面,变成JSP传值JSP也错掉了

4 楼

你可以做一个过滤器,把request中的内容按照UTF-8编码。默认情况下编码应该是
ISO-88591编码。所以出现乱码。至于怎么写过滤器,你可以GOOGLE一下。比较多。

5 楼

我也尝试了下,发现的确有这个问题

在JSP里加入
<%
request.setCharacterEncoding("utf-8");
%>
输出流编码设置为utf-8
测试了下,应该可以了

深入查一下原因的话,来看一下大致过程:
客户端向TextAboutDo.jsp请求页面,发送参数的值是UTF-8编码的
服务端解析参数时,默认用的是ISO-8859-1的编码,于是出现了乱码
上面的setCharacterEncoding是设定全局utf-8为解码方法,这样就正确了

还有一个办法就是:

String id = new String(request.getParameter("id").getBytes("ISO-8859-1"),"UTF-8"))
针对一个参数的值,进行转换
由于默认已经对字符进行了ISO-8859-1解码,造成了乱码,就得重新编起来还原,再用utf-8解码  我也不知道这样说对不对

当然啦,这种方法和前面那种方法不能一起用


6 楼

5楼回答正确,按它说的肯定不会出现乱码!!

我来回复

您尚未登录,请登录后再回复。点此登录或注册