从数据库中读取出来的中文字符不能正常显示 .显示乱码 这个问题问过好多次的了,看看前面的就知道了。在sort=rs.getString("sort");后面加上sort = new String(sort.getBytes("iso-8859-1"),"GB2312"); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 其实你也可以把要写入数据库的东西编码为utf读出的时候再重新转换一下编码。这样大概更规范,操作稍微复杂一点而已。 http://www.asiastar.com/asiastar/index.jsp我代码修改了..还是不行啊... 天天的办法我早上都试过了,不知道为什么,还不是成功..数据库是access 没有用过access做数据库,用mysql和oracle都是可以的。那大概access里面不是以iso-8859-1编码的。那你只有试试第二种,不过转换的函数我暂时不记得了。转成unicode存,读出以后再转成gb2312 怎么说也是一个顶级域名的网站了,为什么还用ACCESS做数据库?你不怕哪天生意好一下子就crash了? 一楼的办法肯定可以哟!access我很早以前就用过,是可以的,我想你看看是不是你的access有点问题,还是什么原因,要不你把一个页面的代码都发上来看看 您的第一个字段内容为: 您的第二个字段内容为: aaa 11 oop 111 ?????? 123 ???? 123 ???? 123 ?????? 数据库操作成功,恭喜你 上面是我用MySQL的一个例子,乱码部分是用了[天天]的办法..下面是代码:<%@ page contentType="text/html;charset=gb2312"%> <%@ page import="java.sql.*"%> <%@ page import="com.mysql.jdbc.Driver"%><html> <body> <%!String secondString;%><%//Class.forName("org.gjt.mm.mysql.Driver").newInstance(); Class.forName("com.mysql.jdbc.Driver").newInstance();//Class.forName("jdbc-mysql.jar").newInstance(); String url ="jdbc:mysql://127.0.0.1:3306/test?user=root&password=";Connection conn= DriverManager.getConnection(url); Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); String sql="select * from yuting"; ResultSet rs=stmt.executeQuery(sql); %><table><tr><td>您的第一个字段内容为:</td> <td>您的第二个字段内容为:</td></tr><%out.print("aaa");while(rs.next()) {%> <tr><td><%=rs.getString(1)%> </td><td><%secondString=rs.getString(2); secondString = new String(secondString.getBytes("iso-8859-1"),"GB2312"); out.println(secondString); %> </td></tr><%}%> </table><%out.print("数据库操作成功,恭喜你");%> <%rs.close(); stmt.close(); conn.close(); %> </body> 是这样的.在我自己机器上是全部都可以的[access,MySQL],没有出现过读取数据库字符显示乱码问题。但在我上传到http://www.asiastar.com/asiastar/index.jsp 上面就不正常了。。怎么会这样的呢。 会不会是你上传以后,服务器对于请求取的的缓存里的index.jsp的编译后东西,就是说实际上没有更新?一下子想不出来你出错的原因。 <meta http-equiv="Content-Type" content="text/html; charset=gb2312"></head>你的网站上的源代码是这样的。根本就没有解析出charset嘛。如果是这个原因..........,你真是冤枉了。 建议你使用unicode存数据库Charset cs = Charset.ForName("GB2312");写入数据库时:String toWrite = new String(cs.decode(ByteBuffer 待写入).array());读出数据库时:String readFromDB = new String(cs.encode(CharBuffer 读出的数据).array());麻烦一点的就是类型转换。但是应该不会出问题。我没有在非中文操作系统上处理编码问题,所以不知道是不是非中文操作系统的原因。不过用了unicode应该不会有问题了。 String str 为数据库里读出的串String result = new String(str.getByte("iso8859_1")); 对象不为null id可能为null吗 jdbc 连接url中的参数,mysql设置数据库、表的参数是什么意思? 怎么样实现表格的列可以自由拖动? 【Tomcat】怎么为每个登陆用户,创建自己的网页目录? 关于上传的问题,进者有分 请问怎么样打开下拉菜单就取出数据库的记录呢 求教:10000*0.00145=14.499999999999998。。这是怎么回事 请指教 急死了!!!!大家来看看我的bean,怎么老是不能调用啊! 关于Servlet问题 关于jbuilderX设置驱动的问题!!!!!! 处学者问题
读出的时候再重新转换一下编码。这样大概更规范,操作稍微复杂一点而已。
数据库是access
你不怕哪天生意好一下子就crash了?
aaa 11 oop
111 ??????
123 ????
123 ????
123 ??????
数据库操作成功,恭喜你
上面是我用MySQL的一个例子,乱码部分是用了[天天]的办法..
下面是代码:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<%@ page import="com.mysql.jdbc.Driver"%>
<html>
<body>
<%!
String secondString;
%>
<%
//Class.forName("org.gjt.mm.mysql.Driver").newInstance();
Class.forName("com.mysql.jdbc.Driver").newInstance();//Class.forName("jdbc-mysql.jar").newInstance();
String url ="jdbc:mysql://127.0.0.1:3306/test?user=root&password=";
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from yuting";
ResultSet rs=stmt.executeQuery(sql); %>
<table><tr><td>您的第一个字段内容为:</td>
<td>您的第二个字段内容为:</td></tr>
<%
out.print("aaa");
while(rs.next()) {%>
<tr><td>
<%=rs.getString(1)%> </td><td>
<%
secondString=rs.getString(2); secondString = new String(secondString.getBytes("iso-8859-1"),"GB2312");
out.println(secondString);
%> </td></tr>
<%}%>
</table>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
</body>
怎么会这样的呢。
根本就没有解析出charset嘛。如果是这个原因..........,你真是冤枉了。
Charset cs = Charset.ForName("GB2312");
写入数据库时:
String toWrite = new String(cs.decode(ByteBuffer 待写入).array());读出数据库时:
String readFromDB = new String(cs.encode(CharBuffer 读出的数据).array());麻烦一点的就是类型转换。但是应该不会出问题。我没有在非中文操作系统上处理编码问题,所以不知道是不是非中文操作系统的原因。
不过用了unicode应该不会有问题了。
String result = new String(str.getByte("iso8859_1"));