写了两个jsp页面index.jsp和mysql_insert.jsp。数据处理流程为:在浏览器(chrome)上访问index.jsp后在其表单上输入数据,提交至mysql_insert.jsp,mysql_insert.jsp首先将接收到的数据按变量存入MySQL的html_db数据库的person_tb中(该表原有部分数据),然后mysql_insert.jsp再拿出该表中所有数据显示在mysql_insert.jsp页面上。
现在发现,当提交的数据中含有中文(比如变量姓名的值为中文)时,mysql_insert.jsp页面上显示新增的那条记录中的相应中文(姓名的值)乱码,其他数据都显示正常,查看数据库,发现也是相应的含有中文的变量值(姓名的值)乱码。乱码情况如下图:
[img]http://files.jb51.net/file_images/article/201308/201308011637166.gif?201371163750[/img]
index.jsp中第一行有语句:<%@ page contentType="text/html;charset=gb2312"%> ,在浏览器(chrome)中访问此页面时无乱码(主要指中文乱码,英文乱码现象还没遇见过)。(试过将gb2312换成utf-8,访问后中文乱码)
mysql_insert.jsp中第一行有语句:<%@page language="java" pageEncoding="UTF-8"%>,在浏览器中直接访问此页面时无乱码。
mysql_insert.jsp页面的代码如下:
[url=to.jsp?param=<%=username %>]
to.jsp页面
<%=URLDecoder.decode(request.getParameter("param"),"utf-8")%>
总之 ,乱码的解决方案如下:
post传值乱码时,在接收端设置request.setCharacterEncoding("UTF-8")
get传值或者url乱码时,手动设置接收的参数String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8") ;
由上可见get,post传值在tomcat5中是不一样的.
看完了上面红字部分的内容,我决定在提交数据的页面设置以UTF-8的格式提交数据,而同时在接收数据的页面设置也以UTF-8接收数据,于是我在两个页面的首部都添加了如下语句:
<%
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=utf-8");
%>
然后测试,OK了!没有乱码了!
现在,index.jsp页面的代码如下:
<%@ page language="java" pageEncoding="utf-8"%>
<%@ page contentType="text/html;charset=utf-8"%>
<%
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=utf-8");
%>
<html>
<head>
</head>
<body>
<form action="mysql_insert.jsp" method="post">
ID :<input type = "text" name="id" value="0"/>
姓名 :<input type = "text" name="name" value="aaa"/>
性别 :<input type = "text" name="sex" value="female"/>
年龄:<input type = "text" name="age" value="20"/>
</br>
<input type = "submit" value="提交"/>
</form>
</body>
</html>