Java 简体、繁体解决方案

为什么要用getBytes然后再转BIG5呢?这种解决方法从一开始根本就错了。

最好的解决方法是从资料进来的时候就要正确的抓到资料。
我这一两个月利用下班时间写了一个用Java Servlet以及XML/XSL来作的留言
板,同时支持简体、繁体,甚至日文的输入与显示,这是怎么做到的呢?很
简单,利用Unicode。

我的servlet处理中文只要两个指令:
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("UTF-8"); (此功能j2ee 1.3就有了)

之后不管你要getParameter或是printWriter.write都可以把所有的String直接
拿来用,不用再做什么转换。存到database里面的资料也是直接储存unicode。
我用的数据库是PostgreSQL因为它是唯一支持Unicode的开放软件数据库(唯一
要注意的是PostgreSQL在initdb要用SQL-ASCII或是UNICODE,不能用
mule-internal,如果你用过PostgreSQL应该知道我在讲什么)。你如
果用的是Oracle或SQLserver, DB2他们的新版应该都是支持Unicode的。mySQL
虽然很快,但是它的功能实在不足(也没有支持unicode),尤其JDBC的driver
还没有官方版,不用也罢。
我本来想移植到mySQL上,但是它竟然连resultSet.isBeforeFirst()都没有
实作,那我怎么判断结果有没有资料啊?

你会说,但是user输入的是BIG5啊?别担心,browser早就帮你解决这个问题了。
只要你用response.setContentType("text/html;charset=UTF-8");接下来虽然
你输入的是big5,但是当browser送出来的时候,它就会根据charset来作编码转换。
这样我们再设request.setCharacterEncoding("UTF-8");然后你用getParameter
时它就会把UTF-8转成真正的unicode。

这个就是系统的美妙之处了,当你在简体的系统上看同样的page时,因为文件的
内容Java已经帮你从unicode转成UTF-8了,所以你还是可以看到繁体字,而你在
reply这篇文章时虽然用的是GB,但是当从browser送出来的时候,它又转成UTF-8
了,然后我们的程序一样处理,当你回到繁体系统来看,又可以看到刚刚发的
简体的reply。

如果你在英文的系统下,想要copy一篇中文文章进来,绝对不能用BIG5直接贴,
因为这时系统的default encoding不对,转码会错。这时你要先用browser先把
文章读出来,把"中文字"(不是BIG5码)copy,贴进来。因为当你在browser里面
看到中文字时,这个中文字已经是用unicode在显示了。

所以这个解决方案才能真正做到: "所见即所得"。也就是说,只要你看得到你
输入的东西,你就可以看到你想要的输出结果。这也就是你在英文环境下,贴
BIG5的"乱码",这个程序也会回big5的"乱码"给你的原因。

Unicode是Java一个对国际化/本土化很好的支持,我们要好好利用这个优点,
做出以前想都没办法想的软件。LinuxFab虽然可以显示繁体与简体,但我若是
大陆的使用者,没看到"简繁"那小小的两个字,而在繁体的网页输入了简体呢?
会有问题。除了用unicode,其它解决的方法都会很复杂,现在Java对server
side的国际化支持算是完整了(1.3之前没有request.setCharaterEncoding(),
总是碍手碍脚),希望大家不要在把unicode当成是不如php, perl的缺点,东
拼西凑的凑到可以显示中文;把精力放在程序本身,而不是转码上。

台湾用Java的人还是不多,尤其是企业;理由不外是performance, 稳定性。
但是你如果知道美国的嘉信理财(我工作的公司),拥有全世界最强大的商用
超级计算机,我们的程序已经有大约20-30%转换成Java,转换的工作还在继续
中,那你会怎么想?Server side的Java有绝大多数CGI无法比拟的优点:Thread
执行序,在只比较一个request的时候,CGI会占优势,但是当成百上千个
request来的时候,Thread的优势就会出来。我们公司也是在比较过两者的
表现之后,才决定进行CGI到Java的转换的。

我的工作是把这些Java的功能加以中文化来提供给住在美国的华裔,对于Java
中文化的问题已经研究了快两年了,期间碰过不少问题,幸而跟我们合作的IBM
对于我们提出的问题都能迅速改进,所以我还能保住我的工作。其实这些问题,
在apache, tomcat等等的开放原始码都已经解决了,我真的不得不佩服这些热
心的人。所以每次我的问题提出来之后,都还会附加:Tomcat不会有这个问题。
我想这多少也刺激他们迅速的改进。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值