jsp的中文问题(100分)

  • 主题发起人 主题发起人 jinsfu
  • 开始时间 开始时间
不管你用的是哪一家的jdbc driver,安装完了都要看他自己带的文档啊!
推荐你用jSQL connect,就是我上面给你的那个。
 
如果你对JDBC URL还不了解的话,请先阅读并理解JDBC教程:
http://java.sun.com/docs/books/tutorial/jdbc/index.html
至于使用除jdbc-obdc桥之外的jdbc driver的url规则,你要看所用的driver的文档。
因为这个url的规则是driver的实现者自己规定的。
 
我认为不光是jdbc的问题。因该说这里包含了web browser,web server,
jdbc和数据库的编码问题。
中文问题已经快说烂了。
其实我认为我们编码尽量不要使用getBytes,这样会导致混乱。
具体分析一下,从web browser入手,不编码的话,ie会将form表单的输入以ISO-8859-1进行编码,然后根据web server进行第二次编码,(比如resin默认编码就是iso-8859-1),这样还是ISO-8859-1,然后存入数据库时,默认的编码是和操作系统相同的,简体中文就是GB2312。
这样,如果不作任何设置,存入到数据库中的就是系统编码。
从数据库中取出来的时候,web server会将其转为(以resin为例)ISO-8859-1,所以如果你只需要在jsp的html中设置:
<meta http-equiv="content-type" content="text/html;charset=GB2312">就可以搞定。
关键在于了解每一步(web browser ->
web server ->
jdbc和数据库)的字符都转成什么编码。
 
to 曹晓钢:
你给我的东西我下载了。然后根据文档进行了配置,将JSQLConnect.jar 拷贝到了
C:/jbuilder6/jakarta-tomcat-4.0.1/common/lib,然后重新运行了tomcat的 startup,
但是,我的页面给出的出错信息是, 没有合适的驱动程序!
我哪里出错了?应该怎么配置?
(呵呵,我发现我已经改变了问题的初衷)
 
Yukuu的总结很全面,谢谢。
我补充一点:做多语言(不光是中文),最好是在英文平台上做,这样便于检查数据流转的每一步是否正确。
而且,如果系统要容纳多种不同的语言,用英文平台也更加合适。
to jinsfu:我不能确定是否放在tomcat的common/lib下面是正确的,请先试一下放在你的web-inf的
lib下面?
 
在我看来,一劳永逸的方法就是转换成为unicode编码。
目前我做完的一个forum项目就是将所有的字符转化为unicode,这样我轻松很多了。
[:D]
 
to Yukuu:
能不能给我们介绍一下?我对这个部分了解不多。
如果你用unicode的,叶面上还是GB2312吗?应该也换成UTF了吧?那么java收到
的就已经是utf了,database里面也是UTF,我的理解对不对?
 
其实说起来就是那一张纸。捅破了就简单了。
先介绍一下我的环境:
IE6.0 , Resin2.1.1 , Oracle8.1.7和class12.jar
我只要设定
<%@ page contentType="text/html;
charset=iso-8859-1" %>
这样jsp在提交表单的时候,以iso-8859-1编码,java自动将字符流转化为unicode,
因为java就是以unicode编码的。我们可以观察到,在servlet得到的字符都转为如
婥
之类的符号,这就是utf-16的十进制码。得到这个编码后,我们以后的工作就
只是读出来了。
婥
在ie中显示正确,打开源代码,还是 婥
这就是说,unicode就是唯一
编码,不管客户端浏览器设置什么编码,都可以正常显示。
谢谢。
 
呵呵,你看看,我输出的unicode 都变中文了。
分开吧:
&# 23412 ;
上面的说明:
unicode都是以&#开头,;号结尾。中间就是每个字符的编码,可以是十进制,
也可以是十六进制:
十进制 &# 23412 ;
十六进制 &#x5ed2 ;
[:)]
 
多谢yukuu的指导。
那么,IE接收到的是'&','#','2','3','4','1','2',';' 8个字节,还是unicode 内码4个字节?
utf-16和utf-7/8的区别又是什么呢?
 
不一定是8个子节。但一定是以&#开头,;结束。
unicode的问题,建议到
http://www.unicode.org/去看看。
我也是学习中。还请多多指教。
 
那岂不是说,如果view source,看到的都是&#什么的...看不到直接的中文了?
 
哈哈,对了,你试了吧。我就觉得这点不爽,所以现在还是暂时用的GBK编码
 
其实是我懒,而且要用getBytes转换,不爽。
不过用new String(String.getBytes("UTF-16"),"GBK");
应该可以搞定的。或者,写个将unicode转GBK的方法。
 
不,我没试,我想的应该是这样。
有个问题,用户输入的时候应该是GB2312还是UTF?java接收到的是什么格式的?unicode内码
还是已经是&#的形式了?我不知道从用户输入的汉字内码到&#形式的格式之间的转换是哪一步做的?
db server里面存放的,是unicode内码还是什么?
用这个办法还有一个问题,就是不好计算字数了。
 
我不喜欢getBytes的原因还有一个是效率低,你看,做两次getBytes,会消耗不少时间和资源。
 
不要管用户输入的是什么编码,默认的ie会将其编译成iso-8859-1,而unicode这一步是在
jre编译的,也就是说,ie传iso-8859-1,jre将其转为UTF;
db里面存放的就是unicode;
计算数字?数据格式分开吧。像google就是用unicode存数据的。所以它在检索的时候,
会出现先检索到日文,再是中文的。
 
我说的是,比如你做forum,一定会用到统计字数吧?就是(本文600字)...这样的。
因为&#后面的长度可能不一样长,好像不能精确统计了.
 
db里面存放的就是unicode;
是内码还是&#的字符串?
如果是内码的话,用jdbc再次读出来的时候,jdbc会把它变成&#的形式?
我关心的就是从unicode内码到&#形式的字符串的转换发生在什么时候。
 
后退
顶部