jsp读取mysql的中文是乱码
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connectionconnection=DriverManager.getC...
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection connection=DriverManager.getConnection("jdbc:odbc:mysql");
用以上方式连接后中文乱码,用jdbc驱动连接则无问题,但是我想用jdbcodbc桥接,请问如何解决中文乱码? 展开
Connection connection=DriverManager.getConnection("jdbc:odbc:mysql");
用以上方式连接后中文乱码,用jdbc驱动连接则无问题,但是我想用jdbcodbc桥接,请问如何解决中文乱码? 展开
3个回答
2013-07-16
展开全部
一、JSP页面显示乱码
下面的显示页面(display.jsp)就出现乱码:
<html>
<head>
<title>JSP的中文处理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<%
out.print("JSP的中文处理");
%>
</body>
</html>
对不同的WEB服务器和不同的JDK版本,处理结果就不一样。原因:服务器使用的编码方式不同和浏览器
对不同的字符显示结果不同而导致的。解决办法:在JSP页面中指定编码方式(gb2312),即在页面的第一
行加上:<%@ page contentType="text/html; charset=gb2312"%>,就可以消除乱码了。完整页面如下
:
<%@ page contentType="text/html; charset=gb2312"%>
<html>
<head>
<title>JSP的中文处理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<%
out.print("JSP的中文处理");
%>
</body>
</html>
二、表单提交中文时出现乱码
下面是一个提交页面(submit.jsp),代码如下:
<html>
<head>
<title>JSP的中文处理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<form name="form1" method="post" action="process.jsp">
<div align="center">
<input type="text" name="name">
<input type="submit" name="Submit" value="Submit">
</div>
</form>
</body>
</html>
下面是处理页面(process.jsp)代码:
<%@ page contentType="text/html; charset=gb2312"%>
<html>
<head>
<title>JSP的中文处理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<%=request.getParameter("name")%>
</body>
</html>
如果submit.jsp提交英文字符能正确显示,如果提交中文时就会出现乱码。原因:浏览器默认使用UTF
-8编码方式来发送请求,而UTF- 8和GB2312编码方式表示字符时不一样,这样就出现了不能识别字符。
解决办法:通过request.seCharacterEncoding ("gb2312")对请求进行统一编码,就实现了中文的正常
显示。修改后的process.jsp代码如下:
<%@ page contentType="text/html; charset=gb2312"%>
<%
request.seCharacterEncoding("gb2312");
%>
<html>
<head>
<title>JSP的中文处理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<%=request.getParameter("name")%>
</body>
</html>
总结:
1. 在jsp中<%@ page contentType="text/html; charset=A" %>如果指定了,那么在改jsp中所有构造
的String(不是引用),如果没有指定编码,那么这些String的编码是A的。
从request的得到的String如果没有指定request的编码的话,他是iso-8859-1的
从别的地方得到的String是使用原来初始的编码的,比如从数据库得到String,如果数据库的编码
是B,那么该String的编码是B而不是A的,也不是系统默认的。
此时,如果要输出的String的编码不是A,那么,很可能显示乱码的,所以首先要将String正确转化
为编码A的String,然后输出。
2. 在jsp中<%@ page contentType="text/html; charset=A" %>没有指定,那么相当于指定了<%@
page contentType="text/html; charset=ISO-8859-1" %>
3. Servelte中如果执行了像 response.setContentType("text/html;charset=A");说明将response的字符输出流编码设置为A,所有要输出的String的编码要转化为A的,否则会得到乱码的。
Servelet中从request得到的String的编码和jsp中一样的,但是在servlet java文件中构造的
String是使用的系统默认的编码的。在servelt中从外部得到的String 是使用原来的编码的,比如从编
码为B的数据库得到的数据是编码为B的,不是A,也不是系统默认的编码。
下面的显示页面(display.jsp)就出现乱码:
<html>
<head>
<title>JSP的中文处理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<%
out.print("JSP的中文处理");
%>
</body>
</html>
对不同的WEB服务器和不同的JDK版本,处理结果就不一样。原因:服务器使用的编码方式不同和浏览器
对不同的字符显示结果不同而导致的。解决办法:在JSP页面中指定编码方式(gb2312),即在页面的第一
行加上:<%@ page contentType="text/html; charset=gb2312"%>,就可以消除乱码了。完整页面如下
:
<%@ page contentType="text/html; charset=gb2312"%>
<html>
<head>
<title>JSP的中文处理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<%
out.print("JSP的中文处理");
%>
</body>
</html>
二、表单提交中文时出现乱码
下面是一个提交页面(submit.jsp),代码如下:
<html>
<head>
<title>JSP的中文处理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<form name="form1" method="post" action="process.jsp">
<div align="center">
<input type="text" name="name">
<input type="submit" name="Submit" value="Submit">
</div>
</form>
</body>
</html>
下面是处理页面(process.jsp)代码:
<%@ page contentType="text/html; charset=gb2312"%>
<html>
<head>
<title>JSP的中文处理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<%=request.getParameter("name")%>
</body>
</html>
如果submit.jsp提交英文字符能正确显示,如果提交中文时就会出现乱码。原因:浏览器默认使用UTF
-8编码方式来发送请求,而UTF- 8和GB2312编码方式表示字符时不一样,这样就出现了不能识别字符。
解决办法:通过request.seCharacterEncoding ("gb2312")对请求进行统一编码,就实现了中文的正常
显示。修改后的process.jsp代码如下:
<%@ page contentType="text/html; charset=gb2312"%>
<%
request.seCharacterEncoding("gb2312");
%>
<html>
<head>
<title>JSP的中文处理</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>
<%=request.getParameter("name")%>
</body>
</html>
总结:
1. 在jsp中<%@ page contentType="text/html; charset=A" %>如果指定了,那么在改jsp中所有构造
的String(不是引用),如果没有指定编码,那么这些String的编码是A的。
从request的得到的String如果没有指定request的编码的话,他是iso-8859-1的
从别的地方得到的String是使用原来初始的编码的,比如从数据库得到String,如果数据库的编码
是B,那么该String的编码是B而不是A的,也不是系统默认的。
此时,如果要输出的String的编码不是A,那么,很可能显示乱码的,所以首先要将String正确转化
为编码A的String,然后输出。
2. 在jsp中<%@ page contentType="text/html; charset=A" %>没有指定,那么相当于指定了<%@
page contentType="text/html; charset=ISO-8859-1" %>
3. Servelte中如果执行了像 response.setContentType("text/html;charset=A");说明将response的字符输出流编码设置为A,所有要输出的String的编码要转化为A的,否则会得到乱码的。
Servelet中从request得到的String的编码和jsp中一样的,但是在servlet java文件中构造的
String是使用的系统默认的编码的。在servelt中从外部得到的String 是使用原来的编码的,比如从编
码为B的数据库得到的数据是编码为B的,不是A,也不是系统默认的编码。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-07-16
展开全部
随便说两句希望能解决你的问题:
1、乱码跟你链接数据库的方式无关系
2、你这种情况是因为数据库的字符编码与页面编码不一直造成,解决如下:
(1)你说数据从数据库读取出来打在页面上是乱码,首先要确认你数据库里面的数据是不是乱码,如果是就要找提交数据到你数据库的那个页面编码是不是跟你数据库编码一致
(2)如果数据库数据是正常的,那么就是你读取页面的编码形式与数据库编码不一致,将你的页面编码改成语你数据编码统一一样
3、如果以上操作后还是无法解决问题,那就是你页面本身问题,编码分两种,一种是你文本编码,一种是你的编译编码,当文本编码和你的编译编码不符时也不行,用记事本打开你的页面选择另存为,改你的文本编码格式(参考:编译编码是GB2312则文本编码改为ANSI,编译编码是UTF-8则文本编码改成UTF-8)
以上操作基本能解决问题,如果还是不行,你就必须强制制定编码(适合GB2312,UTF-8发生的情况很少),方法如下:
public String toChi(String input) {
try {
//System.out.println(input);
byte[] bytes = input.getBytes("ISO8859-1");
return new String(bytes,"GB2312");
}catch(Exception ex){
//System.out.println(ex);
}
return null;
}
你可以将此代码写为.JAVA或者直接下在页面上都可以
最后建议你的所有编码都写成UTF-8,JSP近几年流行的编码格式,支持的字符格式也比GB2312多很多,祝你好运
1、乱码跟你链接数据库的方式无关系
2、你这种情况是因为数据库的字符编码与页面编码不一直造成,解决如下:
(1)你说数据从数据库读取出来打在页面上是乱码,首先要确认你数据库里面的数据是不是乱码,如果是就要找提交数据到你数据库的那个页面编码是不是跟你数据库编码一致
(2)如果数据库数据是正常的,那么就是你读取页面的编码形式与数据库编码不一致,将你的页面编码改成语你数据编码统一一样
3、如果以上操作后还是无法解决问题,那就是你页面本身问题,编码分两种,一种是你文本编码,一种是你的编译编码,当文本编码和你的编译编码不符时也不行,用记事本打开你的页面选择另存为,改你的文本编码格式(参考:编译编码是GB2312则文本编码改为ANSI,编译编码是UTF-8则文本编码改成UTF-8)
以上操作基本能解决问题,如果还是不行,你就必须强制制定编码(适合GB2312,UTF-8发生的情况很少),方法如下:
public String toChi(String input) {
try {
//System.out.println(input);
byte[] bytes = input.getBytes("ISO8859-1");
return new String(bytes,"GB2312");
}catch(Exception ex){
//System.out.println(ex);
}
return null;
}
你可以将此代码写为.JAVA或者直接下在页面上都可以
最后建议你的所有编码都写成UTF-8,JSP近几年流行的编码格式,支持的字符格式也比GB2312多很多,祝你好运
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-07-16
展开全部
其他的先不用说,先请你看看你的mysql的默认编码是不是gb2312,或者是其他支持中文的编码
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询