|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
其实你不用Struts,spring这些工具,直接用jsp,servlet能够很方便地写出来,而且,可以根据个人的水平、爱好,有很多方案。而struts,spring这些工具的出来。编程|心得|中文 Java的中文编程与设置心得
Java的中文成绩汗青久长,绵延不停,至今也没有完整办理,可是上有政策下有对策,我们老是有举措弄定它的。跟Java相干的中文成绩次要有两类,一类是编程的成绩,触及到I/O,内码转换等。第二类是Java运转情况的设置,触及字体,属性设置等。我方才用了一天的工夫办理这些成绩,以为很有需要给本人写个备忘录之类的。
我看仍是从成绩动手吧,如许不致于让人人打打盹。我想写个程序,这个程序有个基础功效就是显现文件内容,我用JTextArea来做显现的事变,程序复杂的抵家了,可是就是中文都是乱码。我的设置是JBuilder7,JBuilder自带的JDK1.3.3_b24,我本人装的JDK是JDK1.4.0_02_b02,都是支流的JDK。操纵体系是英文Windows2000加中文撑持包。
我实验换JDK,1.3.3和1.4.0都不可,down一个最新的j2sdk-1_4_1-rc也是不可,仿佛不是JDK的成绩,因而我就把精神会合到I/O的编码转换上,我查阅了网上多少关于JAVA中文成绩的文章,把编码转换弄的倍儿分明,但是怎样试,换甚么编码折腾都不可,反而显现的更糟,现在仍是乱的有些礼貌,就是象在纯英文体系上显现的那样,好歹我还晓得那是汉字,只是显现不出来,等我折腾编码,就变得都是问号了。唉,忧郁!
编码转换心得:
JAVA外部是UNICODE编码,在I/O时假如利用Reader/Writer就要产生编码转换,利用体系属性file.encoding作为编码体例。假如利用Stream就没有转换的事变了,那是Binary的数据。
有效的办法有:1。在Reader/Writer上加encoding的选项,注重编码的偏向,在Reader中的encoding暗示把数据从encoding转换成Unicode,writer就是把Unicode的字符转换成encoding格局的。2。用String.getByte()把字符串转换成指定编码。
经常使用的编码格局:ISO8859_1,这个是英文体系缺省的8bit编码,由于是8bit的,以是不会把汉字的高位删往,以是用它也是能够处置汉字的(我本人这么了解,总以为有些不当,但又不晓得不当在那边,还看高人指出)。GB2312和GBK,汉字编码,保举利用GBK,它兼容GB2312而且撑持更多汉字。UNICODE,一个年夜的字符集,不知是否是国际尺度归正人人都撑持,利用16位对每一个字符编码,汉字固然正符合,但英文却亏损了,要用多一倍的空间来存储,以是良多人仍是老迈不愿意,写的程序不撑持UNICODE。
JSP/Servlet的中文成绩有两种办理举措:1。不在程序中举行编码转换,把这个事情交给扫瞄器,办法就是用javacCencodingGBK*.java来编译一切的bean,然后在JSP页面上加
<%@pagecontentType="text/html;charset=gb2312"%> <%@pagecontentType="text/html;charset=gb2312"%>
大概是在HTML中间接加:
究竟加谁人,尝尝就晓得了,我也弄不分明了。
2。在程序中指定编码,用javacCencodingISO8859_1*.java来编译一切的bean,在触及到中文显现的程序上加
str=newString(str.getBytes("ISO8859_1"));
下面两种办法不克不及混用,意义就是要末就是GBK,要末就是ISO8859_1,从里到外都一样就行了。
数据库JDBC的中文成绩,一样平常只需依照数据库指定的编码举行转换,好比依照ISO8859_1读,ISO8859_1写,一样平常就没甚么成绩了。
固然有这些编码上的心得,可是其实不能办理我的成绩。看来我的程序输出输入用的都是ISO8859_1,我的成绩跟编码没甚么干系。是否是字体的成绩呢?在Swing的组件中,字体老是那末几个,基础上是定逝世的,选谁人都不可。可是我俄然发明能够变动这些字体的设置,就是font.properties这个文件,一样平常JDK都带了中文的字体设置文件,多是font.properties.zh之类的,分歧版本的JDK名字有些不同,你要做的就是用中文的设置掩盖font.properties文件。我满心欢乐的觉得乐成了,可是失利无情的又一次冲击了我。不是这类办法不合错误,可是在Windows体系中,java可以对照主动的反省你的体系编码,利用最符合的字体设置文件,一样平常不必要你修改了,在JDK1.2之前的确是要这么改的,难怪那篇文章是JDK1.1的文档呢。
连font.properties也不灵了,唉,是否是JBuilder有成绩呀?到了这儿,我不能不嫌疑它了,固然它从没让我扫兴过,我关失落JBuilder,拿起JDK命令行,哎呀!心爱的中文居然出来了!几乎是.....稀里糊涂呀,由于JBuilder也是用的这个JDK呀?没来由呀,我再次翻开JBuilder,运转,乱码!怪事.......我来看看.....我把JBuilder内里的实行命令拷贝到DOS窗口内行动实行....没有中文.....怪怪怪,我细心对比我手敲的命令和JBuilder拷出来的命令,除我用的是java它用的是javaw以外,其余几近都一样,岂非.......这个java和javaw居然会纷歧样?
唉.......要我说甚么呢,谜底就是这个了,javaw会利用与java分歧的Local设置举行事情,招致了我一向看不到中文,而java就是好好的。JBuilder也是好好的,没有成绩,挪用javaw也不是它的错,岂非你想每次运转大概调试的时分蹦出个DOS黑框么?呵呵。这是JDK的一个Bug,我在java的网站上查到这个bug,形貌的情形跟我的一样,然后Sun说这个Bug已修复了,嘿嘿,几乎就是扯淡!修复个茄子!Bug编号是:4629351。不信能够往看看。
可是岂非我就不克不及在JBuilder内里看我心爱的中文了吗?仿佛JBuilder5的时分还能选择是用java仍是javaw,如今仿佛没法儿选了。怎样才干让javaw撑持中文呢?经由又是一番苦苦查找,居然没有甚么了局,忧郁!合法苦闷之时,俄然想起现在设置过UNIX下的TOMCAT,仿佛加了些启动参数,就可以让tomcat撑持中文了,从速翻出之前的文档,啊,幸亏我现在写了事情心得,要否则又抓瞎了。实在事理很复杂,就是给JAVA假造机加上一些属性:
-Dfile.encoding=GBK-Ddefault.client.encoding=GBK-Duser.language=zh-Duser.region=CN
把它跟在javaw的命令行前面当参数,哈哈,弄定!
在JBuilder当选择Project->ProjectProperties->run->edit->VMParameters,填上就好了!
设置心得:
在JDK低版本和UNIX下,必要修改font.properties,让JAVAVM可以找到符合的字体来显现汉字。
今朝为止,javaw有Bug,只利用英文的Local,必要给VM加上属性才行一般显现中文。
自己的整个学习思路完全被老师的讲课思路所牵制,这样几节课听下来,恐怕自己的见解都应该是书里的知识点了,根本谈不上自身发现问题,分析问题,和解决问题能力的切实提高。 |
|