首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

为什么form表单里的中文是乱码解决办法

2011-12-31 
为什么form表单里的中文是乱码%@ page languagejava importjava.util.* pageEncodinggb2312%%

为什么form表单里的中文是乱码
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ page contentType="text/html;charset=gb2312"%>
<%
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 'add.jsp' starting page</title>
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">  
<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>
  <center>
  用户注册<br>
  <form action="/spring_ssh/register.do" method="get">
  <table>
  <tr>
  <td>
  用户名:
  </td>
  <td>
  <input type="text" name="userName"/>
  </td>
  </tr>
  <tr>
  <td>
  年龄:
  </td>
  <td>
  <input type="text" name="age"/>
  </td>
  </tr>
  <tr>
  <td>
  <input type="submit" value="注册">
  </td>
  <td>
  <input type="reset" value="清空">
  </td>
  </tr>
  </table>
  </form>
  </center>


  <% 
  out.print("JSP的中文处理,测试"); 
  %>


  </body>
</html>


-----------------------
为什么我在用户名里输入中文,提交到后台,显示的是问号(后台程序有System.out.println(request.getParameter("userName"));),而 out.print("JSP的中文处理,测试"); 这句能正常显示呢?



[解决办法]
后台也加上
request.setCharacterEncoding("gb2312");
[解决办法]
产生乱码主要是要看两端编码/解码问题还跟网络传输有关系
一般post提交:
开始用<%request.setCharacterEncoding("gb2312");%>就能正确显示中文
普通get提交:
提交参数假如是userName
要用String userName = request.getParameter("userName");
new String(userName.getBytes("iso8859-1"),"gb2312");
才能正确解码提交来的参数
本页要正确显示中文开始编码要用charset="gb2312"
同时del.jsp开始也设置成charset="gb2312"
一楼回答的是如果用url传参数的时候
用URLEncoder.encode(参数,"编码");
数据库编码安装时就决定了
数据库安装时最好使用gbk编码,
oracle,mysql安装时都可以选择,否则读取数据很麻烦,需要转码才能正确显示


URL中文参数传输的问题出现乱码
解决办法
1) 打开tomcat的server.xml文件,找到区块,加入如下一行:
URIEncoding=”GBK”
完整的应如下:
 
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="GBK"/>


 
 
2)重启tomcat,一切OK。

格式。出现了乱码。
[解决办法]
请加上中文过滤器。或者在form的reset方法中设定request的字符集接收方式。

一般工作中都是使用中文过滤器。
原因是虽然你的页面设置为中文,但表单提交使用的method="get",get方式数据都是通过地址栏传输,数据会以iso-8859-1方式传输,因此产生乱码。
手动把乱码的字符串重新打碎,然后使用gb2312拼装后就可以。
[解决办法]
我想你把表单的method改成post应该就好了~~~~~~~
[解决办法]
做web项目的时候一般都要在项目里面加上一个过滤层,专门用来处理字符之间的转化,这个过滤层的代码在tomcat的目录里面就有,诸如Tomcat5.5\webapps\servlets-examples\WEB-INF\classes\filters就可以看见一个SetCharacterEncodingFilter.java的源文件,这就是tomcat自己写的过滤层,你把它配置在你的WEB项目中就可以了~~~
[解决办法]
如果你要在后要处理中文乱码的话,调用request的时候应该先进行一次转码的过程!

Java code
request.setCharacterEncoding("gb2312");
[解决办法]
探讨
如果你要在后要处理中文乱码的话,调用request的时候应该先进行一次转码的过程!

Java coderequest.setCharacterEncoding("gb2312");



在request使用之前加上上面的这句话处理以下就ok了!

[解决办法]
服务器,接受和传送页面的编码一致

热点排行