📄 573036.xml
字号:
<?xml version='1.0' encoding='GB2312'?>
<?xml:stylesheet type='text/xsl' href='../csdn.xsl'?>
<Topic>
<Issue>
<PostUserNickName>pennate</PostUserNickName>
<rank>一级(初级)</rank>
<ranknum>user1</ranknum>
<credit>110</credit>
<TopicId>573036</TopicId>
<TopicName>求解jsp存在的中文乱码问题</TopicName>
<PostUserId>11304</PostUserId>
<PostUserName>pennate</PostUserName>
<RoomName>JSP</RoomName>
<ReplyNum>8</ReplyNum>
<PostDateTime>2002-3-13 13:02:09</PostDateTime>
<Point>20</Point>
<ReadNum>0</ReadNum>
<RoomId>28</RoomId>
<EndState>2</EndState>
<Content>mysql3.23+tomcat3.2+win2000
当用ODBC连接数据库时,不存在中文乱码问题,就是速度奇满。
改用JDBC连接数据库后,数据库原有的中文信息jsp页面上能够正常显示。
可是如果增加或修改中文信息,则为乱码
不知如何解决,
敬请关注
部分代码:
<%@ page contentType="text/html;charset=gb2312" %>
<%@page import="java.sql.*" %>
<%
  //connect to database
  String url=new String();
  //url="jdbc:odbc:worklog";
  //Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
 // Class.forName("org.gjt.mm.mysql.Driver").newInstance();
 // url="jdbc:mysql://192.168.12.119/logdb?user=logdb&password=logdb&useUnicode=true&charcterEncoding=8859_1";
  //Connection conn=DriverManager.getConnection(url);</Content>
</Issue>
<Replys>
<Reply>
<PostUserNickName></PostUserNickName>
<rank>一级(初级)</rank>
<ranknum>user1</ranknum>
<credit>100</credit>
<ReplyID>3812969</ReplyID>
<TopicID>573036</TopicID>
<PostUserId>118261</PostUserId>
<PostUserName>lxlhl</PostUserName>
<Point>0</Point>
<Content>用resin没有乱吗问题或者升级你的tomcat</Content>
<PostDateTime>2002-3-13 14:10:58</PostDateTime>
</Reply>
<Reply>
<PostUserNickName>东南西北</PostUserNickName>
<rank>三级(初级)</rank>
<ranknum>user3</ranknum>
<credit>110</credit>
<ReplyID>3812999</ReplyID>
<TopicID>573036</TopicID>
<PostUserId>129031</PostUserId>
<PostUserName>jacob1</PostUserName>
<Point>10</Point>
<Content>那是因为编码问题。
在页面上显示的是GBK编码方式,而mysql的编码方式是unicode,
你用我下面提供的这段转码程序就能正常的了
<%!
String getStr(String str)
{
try{
	String temp_p=str;
	byte[] temp_t=temp_p.getBytes("GBK");
	String temp=new String(temp_t,"ISO8859-1");
	return temp;
}catch(Exception e){}
return "null";
} 
%>
这是读入数据库时string的编码转换程序段。用javabean封装起来每次调用也可以</Content>
<PostDateTime>2002-3-13 14:12:09</PostDateTime>
</Reply>
<Reply>
<PostUserNickName>东南西北</PostUserNickName>
<rank>三级(初级)</rank>
<ranknum>user3</ranknum>
<credit>110</credit>
<ReplyID>3813121</ReplyID>
<TopicID>573036</TopicID>
<PostUserId>129031</PostUserId>
<PostUserName>jacob1</PostUserName>
<Point>0</Point>
<Content>这是编码的问题,页面编码用的是GBK和mysql数据库的编码不同,它用的是unicode。
要彻底解决的话可以用转换程序
例如:
<%!
String getStr(String str)
{
try{
	String temp_p=str;
	byte[] temp_t=temp_p.getBytes("GBK");
	String temp=new String(temp_t,"ISO8859-1");
	return temp;
}catch(Exception e){}
return "null";
} 
%>
这是把string写入数据库时所用的转换程序段,你也可以把他用javabean封装起来,每次调用</Content>
<PostDateTime>2002-3-13 14:19:59</PostDateTime>
</Reply>
<Reply>
<PostUserNickName>风笑痴</PostUserNickName>
<rank>二级(初级)</rank>
<ranknum>user2</ranknum>
<credit>100</credit>
<ReplyID>3816405</ReplyID>
<TopicID>573036</TopicID>
<PostUserId>27894</PostUserId>
<PostUserName>littleyy</PostUserName>
<Point>5</Point>
<Content>Java中文显示问题FAQ 
---------------------- 
1.控制面板-区域设置-英文(或直接安装英文版OS) 
2.JSP页面中加入一条语句: 
  <%@ page contentType="text/html;charset=gb2312" %> 
3.编译servlet使用: 
  javac -encoding iso8859-1 myservlet.java 
  在jsp的zone配置文件中,修改编译参数为: 
  compiler = builtin-javac -encoding ISO8859-1 
4.CLASSPATH中加入i18n.jar的路径 
5.源程序中加入代码变换函数: 
  <%! 
public String getStr(String str){ 
try{ 
String temp_p = str; 
byte[] temp_t = temp_p.getBytes("ISO8859-1"); 
String temp = new String(temp_t); 
return temp; 
} 
catch(Exception e){} 
return "null"; 
} 
%> 
6.如果是直接赋值的中文字串,用<%@ page contentType="text/html;charset=gb2312" %> 
  就足够了。 
7.如果使用request传过来的中文字串,用getStr(String)方法转换后使用。</Content>
<PostDateTime>2002-3-13 17:35:29</PostDateTime>
</Reply>
<Reply>
<PostUserNickName>网络苹果</PostUserNickName>
<rank>二级(初级)</rank>
<ranknum>user2</ranknum>
<credit>100</credit>
<ReplyID>3817617</ReplyID>
<TopicID>573036</TopicID>
<PostUserId>203673</PostUserId>
<PostUserName>netapple</PostUserName>
<Point>0</Point>
<Content>你mysql 在2000里是怎么成功的,可不可以指点一下,我怎么都没成功,我下载的是直接解压缩的,如果你的是有安装程序的,是在哪 儿下载的?</Content>
<PostDateTime>2002-3-13 18:59:33</PostDateTime>
</Reply>
<Reply>
<PostUserNickName>pennate</PostUserNickName>
<rank>一级(初级)</rank>
<ranknum>user1</ranknum>
<credit>110</credit>
<ReplyID>3831122</ReplyID>
<TopicID>573036</TopicID>
<PostUserId>11304</PostUserId>
<PostUserName>pennate</PostUserName>
<Point>0</Point>
<Content>好象各位的方法都不灵光呀
现在的问题不是中文显示的问题,而是数据存取的问题
我不知道是否写入数据库之前需要对中文进行编码处理</Content>
<PostDateTime>2002-3-14 16:55:30</PostDateTime>
</Reply>
<Reply>
<PostUserNickName>宝宝猫</PostUserNickName>
<rank>五级(中级)</rank>
<ranknum>user5</ranknum>
<credit>100</credit>
<ReplyID>3831640</ReplyID>
<TopicID>573036</TopicID>
<PostUserId>193243</PostUserId>
<PostUserName>jimjxr</PostUserName>
<Point>5</Point>
<Content>// url="jdbc:mysql://192.168.12.119/logdb?user=logdb&password=logdb&useUnicode=true&charcterEncoding=8859_1"; 
这个改成
url="jdbc:mysql://192.168.12.119/logdb?user=logdb&password=logdb&useUnicode=true&charcterEncoding=GB2312";
试试 
</Content>
<PostDateTime>2002-3-14 17:21:26</PostDateTime>
</Reply>
<Reply>
<PostUserNickName>东南西北</PostUserNickName>
<rank>三级(初级)</rank>
<ranknum>user3</ranknum>
<credit>110</credit>
<ReplyID>3852142</ReplyID>
<TopicID>573036</TopicID>
<PostUserId>129031</PostUserId>
<PostUserName>jacob1</PostUserName>
<Point>0</Point>
<Content>
不是不灵光,是你还没有认识到中文显示的问题。
形象的举个比喻,就是说数据库储存字符串的时候,是存储编码方式A的String,而页面显示时,是显示编码方式B的String,如果你从数据库中直接读出A方式的String然后显示在页面上,怎么会正确呢! 反过来存入数据库时也是同样的道理,所以你用心思考一下,用我所提供的那段程序就可以解决的了。
 
</Content>
<PostDateTime>2002-3-15 22:14:30</PostDateTime>
</Reply>
<Reply>
<PostUserNickName>pennate</PostUserNickName>
<rank>一级(初级)</rank>
<ranknum>user1</ranknum>
<credit>110</credit>
<ReplyID>3874176</ReplyID>
<TopicID>573036</TopicID>
<PostUserId>11304</PostUserId>
<PostUserName>pennate</PostUserName>
<Point>0</Point>
<Content>感谢各位的帮忙,我已经解决了此问题。
各位给我提供了很好的启发。
我的解决方法如下:
这是最初ODBC 桥下的代码:
<%String classid=new String(request.getParameter("classid").getBytes("8859_1"), "GB2312");%>
<%String classname=new String(request.getParameter("classname").getBytes("8859_1"), "GB2312");%>
采用JDBC后,代码改为:
<%String classid=request.getParameter("classid");>
<%String classname=request.getParameter("classname;%>
这样就可以了。简单吧。
有如下缺点存在:
调试阶段,打印SQL语句时,包含中文的部分会出现乱码,建议用英文数据调试。
还有,如果再回到ODBC时,可能会有问题。
希望对同志们能有参考价值
</Content>
<PostDateTime>2002-3-18 12:57:42</PostDateTime>
</Reply>
</Replys>
</Topic>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -