JSP网页里是charset=UTF-8,Mysql5里存取的数据库的charset也设成了UTF-8,可为啥通过JSP网页存取中文还是显示乱码?

sunsys Engineer  2007-08-10 12:28:11
JSP网页里是charset=UTF-8:
<%@ page contentType="text/html; charset=UTF-8" language="java" import="java.sql.*" errorPage="error.jsp" %>

Mysql5里存取的数据库的charset也设成了UTF-8,可为啥通过JSP网页存取中文还是显示乱码?

还需要在Mysql5里添加啥设置,或在JSP网页里添加啥语句吗?
...全文
3050 点赞 收藏 21
写回复
21 条回复
zxy0659 2012年05月08日
我用的是SSH架构写的 从网页向mySql 数据库中存入中文数据 数据库中存入的数据会变成乱码

每一个页面的设置为 都是charset=UTF-8:
回复 点赞
RomandAccessFile 2007年08月22日
Sorry..少了一点..那么数据库链接用
jdbc:mysql://192.168.0.200/asp?useUnicode=true&characterEncoding=GB2312
回复 点赞
RomandAccessFile 2007年08月22日
必解决中文问题
1.在Tomcat 的server.xml 中

<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="gbk" />

2.Filter
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<filter>
<filter-name>setCharacterEncodingFilter</filter-name>
<filter-class>asp.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>setCharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

package asp;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class SetCharacterEncodingFilter implements Filter
{
/**
* Example filter that sets the character encoding to be used in parsing the incoming request
*/
/**
* Take this filter out of service.
*/
public void destroy()
{
}
/**
* Select and set (if specified) the character encoding to be used to interpret request parameters for this request.
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
{
// response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("GB18030");
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException
{
}
}
3.每个页面

<%@ page contentType="text/html; charset=gb2312" language="java" errorPage="" %>

一切就OK..
如果用Ajax
那么.在保证前三个部份的前题下.

get 不变
post 使用两次encodeURI
function createPostDo(/*条件*/,actionUrl)/*Ajax post 第二步 将Post的条件格式发送到指定的URL*/
{
post = encodeURI(/*条件*/);
post = encodeURI((/*条件*/);//两次,很关键
var xmlObj = new ActiveXObject('Msxml2.XMLHTTP');
var URL = actionUrl;//文件名需要调整成测试时的相应位置?
xmlObj.open ('post',URL,false);
xmlObj.setrequestheader("cache-control","no-cache");
xmlObj.setrequestheader("Content-Type","application/x-www-form-urlencoded");
xmlObj.send (post);//注意:POST方式,使用这个来发送内容?
}
回复 点赞
penghao122 2007年08月22日

看到乱码就要统一编码
看到乱码我就想起了过滤器

想当年乱码气吞万里如虎
回复 点赞
baobao28 2007年08月22日
存入:只要保证在后台输出的时候是中文,到数据库就是中文
取出:加字符转码,然后在后台输出看看,如果是中文,到页面也是中文。页面用GB2312
回复 点赞
sunsys 2007年08月21日
极少时也能存入2个不同中文字,有时1个中文字也存不入。 反正就是极不稳定, 大多时候报错
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'ItemName' at row 1

我现在是 Netbeans6+Tomcat6.0.13+Mysql5
回复 点赞
sunsys 2007年08月21日
各位老大, 我加了
<%@page language="java" pageEncoding="UTF-8" errorPage="error.jsp"%>

response.setCharacterEncoding("utf-8");
request.setCharacterEncoding("utf-8");

Worker.java的doUpdate函数里加了
Statement s = null;
s = con.createStatement();

s.executeUpdate("set names utf8");

s.executeUpdate(sql);

/////
现在偶尔存入mysql5的可以是中文了。在ItemName,偶尔存入1个中文字,或好几个相同的中文字都行,
但存入2个不同的中文字 就不行了,报错
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'ItemName' at row 1
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2868)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3170)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1316)
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1235)
at org.apache.tomcat.dbcp.dbcp.DelegatingStatement.executeUpdate(DelegatingStatement.java:228)
at com.borrowsys.db.Worker.doUpdate(Worker.java:52)
at com.borrowsys.db.Worker.updateItem(Worker.java:165)
at org.apache.jsp.updateitem_jsp._jspService(updateitem_jsp.java:115)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)

怎么办啊?是doUpdate函数里加的s.executeUpdate("set names utf8"); 有错吗?
都快绝望了!
回复 点赞
zhl0369 2007年08月15日
我也遇到类似的问题:
http://community.csdn.net/Expert/topic/5710/5710366.xml?temp=.4726526

首先,你要保持容器 jsp页面 数据库 编码统一
其次 request.setCharacterEncoding("utf8");
回复 点赞
sDuma 2007年08月15日
String url ="jdbc:mysql://localhost/softforum?user=soft&password=soft1234&useUnicode=true&characterEncoding=UTF-8"
后面加上 characterEncoding=UTF-8

还有一个比较隐蔽的问题:
如果你是用 DW 编辑的JSP页面,一定要在“页面属性”这项中,将编码改为 UTF-8
回复 点赞
随风醉舞 2007年08月15日
如果LS的方法不行,再加上<%request.setCharacterEncoding("UTF-8");%>试下
回复 点赞
hunter123456qw 2007年08月15日
注意在保存jsp文件时,转化器设置为UTF-8(注意全大写,即有UTF-8的地方,UTF几个字母大写)

*另在引入js文件时,在EditPlus打开,在保存时,也要注意转换器,设置为UTF-8
回复 点赞
混沌骑士 2007年08月15日
1.添加filter过滤 注明encoding为 UTF-8

2.jsp页面 <%@ page language="java" pageEncoding="UTF-8"%>

3.mysql安装时选择utf-8 ,建库的时候也要注明utf-8 编码(sql语句中)
回复 点赞
175cm 2007年08月15日
应该是在容器中,request时候 get post 出了问题吧,用一个filter
或者直接将 Tomcat5.5 看能不能改配置,使其默认编码是UTF8
回复 点赞
CodeVitamin 2007年08月14日
request.setCharacterEncoding("utf8");
回复 点赞
nasiso 2007年08月14日
上月也碰到这个问题,俺的解决方法是这样,楼主试看:
当时的环境是:装了中文语言包的英文2003 + (因为是给客户的服务器上安装,有个不知道为什么会不认gbk字符集的)中文JRE1.4 + Mysql5 +俺公司做的java后台服务

1)先用sql语句(帮助文档里面有)查数据库和表里面的字符集,然后通通用sql语句改成gb2312的;
2)java -version,看它有没冒出来说不支持这个字符集,如果冒了,就把它卸了重装;

然后搞定。。。
回复 点赞
w39509027 2007年08月14日
设置MYSQL的环境为GBK或UTF-8。
回复 点赞
王金豆 2007年08月14日
顶 楼上的
回复 点赞
大真 2007年08月13日
回复 点赞
sunsys 2007年08月13日

如果Mysql里有中文, 读出还是中文。
只是通过JSP 网页输入中文,存入mysql5 就成乱码了。
用的是 Tomcat5.5 。

回复 点赞
YibLee 2007年08月10日
$charset = 'utf8';
mysql_query("SET character_set_connection=$charset, character_set_results=$charset, character_set_client=binary");
回复 点赞
发动态
发帖子
Web 开发
创建于2007-09-28

5.2w+

社区成员

34.1w+

社区内容

Java Web 开发
社区公告
暂无公告