⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 573036.xml

📁 论坛精华帖子
💻 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页面上能够正常显示。
可是如果增加或修改中文信息,则为乱码
不知如何解决,
敬请关注
部分代码:

&lt;%@&#32;page&#32;contentType="text/html;charset=gb2312"&#32;%&gt;
&lt;%@page&#32;import="java.sql.*"&#32;%&gt;

&lt;%
&#32;&#32;//connect&#32;to&#32;database
&#32;&#32;String&#32;url=new&#32;String();
&#32;&#32;//url="jdbc:odbc:worklog";
&#32;&#32;//Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
&#32;//&#32;Class.forName("org.gjt.mm.mysql.Driver").newInstance();
&#32;//&#32;url="jdbc:mysql://192.168.12.119/logdb?user=logdb&amp;password=logdb&amp;useUnicode=true&amp;charcterEncoding=8859_1";
&#32;&#32;//Connection&#32;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,
你用我下面提供的这段转码程序就能正常的了

&lt;%!
String&#32;getStr(String&#32;str)
{
try{
&#9;String&#32;temp_p=str;
&#9;byte[]&#32;temp_t=temp_p.getBytes("GBK");
&#9;String&#32;temp=new&#32;String(temp_t,"ISO8859-1");
&#9;return&#32;temp;
}catch(Exception&#32;e){}
return&#32;"null";
}&#32;
%&gt;

这是读入数据库时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。

要彻底解决的话可以用转换程序
例如:
&lt;%!
String&#32;getStr(String&#32;str)
{
try{
&#9;String&#32;temp_p=str;
&#9;byte[]&#32;temp_t=temp_p.getBytes("GBK");
&#9;String&#32;temp=new&#32;String(temp_t,"ISO8859-1");
&#9;return&#32;temp;
}catch(Exception&#32;e){}
return&#32;"null";
}&#32;
%&gt;

这是把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&#32;
----------------------&#32;
1.控制面板-区域设置-英文(或直接安装英文版OS)&#32;
2.JSP页面中加入一条语句:&#32;
&#32;&#32;&lt;%@&#32;page&#32;contentType="text/html;charset=gb2312"&#32;%&gt;&#32;
3.编译servlet使用:&#32;
&#32;&#32;javac&#32;-encoding&#32;iso8859-1&#32;myservlet.java&#32;
&#32;&#32;在jsp的zone配置文件中,修改编译参数为:&#32;
&#32;&#32;compiler&#32;=&#32;builtin-javac&#32;-encoding&#32;ISO8859-1&#32;
4.CLASSPATH中加入i18n.jar的路径&#32;
5.源程序中加入代码变换函数:&#32;
&#32;&#32;&lt;%!&#32;
public&#32;String&#32;getStr(String&#32;str){&#32;
try{&#32;
String&#32;temp_p&#32;=&#32;str;&#32;
byte[]&#32;temp_t&#32;=&#32;temp_p.getBytes("ISO8859-1");&#32;
String&#32;temp&#32;=&#32;new&#32;String(temp_t);&#32;
return&#32;temp;&#32;
}&#32;
catch(Exception&#32;e){}&#32;
return&#32;"null";&#32;
}&#32;
%&gt;&#32;
6.如果是直接赋值的中文字串,用&lt;%@&#32;page&#32;contentType="text/html;charset=gb2312"&#32;%&gt;&#32;
&#32;&#32;就足够了。&#32;
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>//&#32;url="jdbc:mysql://192.168.12.119/logdb?user=logdb&amp;password=logdb&amp;useUnicode=true&amp;charcterEncoding=8859_1";&#32;
这个改成
url="jdbc:mysql://192.168.12.119/logdb?user=logdb&amp;password=logdb&amp;useUnicode=true&amp;charcterEncoding=GB2312";
试试&#32;

</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然后显示在页面上,怎么会正确呢!&#32;反过来存入数据库时也是同样的道理,所以你用心思考一下,用我所提供的那段程序就可以解决的了。
&#32;
</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&#32;桥下的代码:
&lt;%String&#32;classid=new&#32;String(request.getParameter("classid").getBytes("8859_1"),&#32;"GB2312");%&gt;
&lt;%String&#32;classname=new&#32;String(request.getParameter("classname").getBytes("8859_1"),&#32;"GB2312");%&gt;
采用JDBC后,代码改为:
&lt;%String&#32;classid=request.getParameter("classid");&gt;
&lt;%String&#32;classname=request.getParameter("classname;%&gt;
这样就可以了。简单吧。

有如下缺点存在:
调试阶段,打印SQL语句时,包含中文的部分会出现乱码,建议用英文数据调试。

还有,如果再回到ODBC时,可能会有问题。

希望对同志们能有参考价值
</Content>
<PostDateTime>2002-3-18 12:57:42</PostDateTime>
</Reply>
</Replys>
</Topic>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -