日期:2014-05-18  浏览次数:20758 次

为什么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="15