找回密码
 立即注册
搜索
查看: 415|回复: 5

(原创)Java中文化的处理(总结)

[复制链接]

327

主题

3264

回帖

3641

积分

荣誉版主

积分
3641
发表于 2003-10-23 10:03:14 | 显示全部楼层 |阅读模式
目标是2点:1、程序能正确显示(输出)中文(或者其他任何地方的文字) 2、程序能正确得到(输入)中文(或者其他任何地方的文字)。

相关的环境有:操作系统的支持,数据库的支持,编译器的支持,运行器的支持,程序的支持。
操作系统、数据库不再考虑了,应该自己设置正确。编译器就是Javac,国际化的支持,还是不错的,也不再考虑。运行器就是Java或者app server,一般不再考虑,但有些app server,还是指定file.encoding比较好。程序就是自己写的程序,当然是要处理的部分。

java对国际化的支持,是不错的,那么它是怎么做到的呢?具我的了解,它是判断了操作系统的local属性。所以,类似的,自己写的程序,也这么做,效果最好。

application比较简单,不用多说什么,把要输出文字做成一个一个语言包,程序取的时候,随便指定上encoding,就OK了。

web上的复杂一点。但是一样的道理,贴一段程序,大家都明白了

  1. String clientLanguage = request.getHeader("Accept-Language");
  2. if ("zh-CN".equals(clientLanguage)) {
  3.   request.setCharacterEncoding("GBK");
  4.   response.setContentType("text/html; charset=GBK");
  5. }
  6. else if ("zh-TW".equals(clientLanguage)) {
  7.   request.setCharacterEncoding("BIG5");
  8.   response.setContentType("text/html; charset=BIG5");
  9. }
  10. else if ("ja".equals(clientLanguage)) {
  11.   request.setCharacterEncoding("Shift_JIS");
  12.   response.setContentType("text/html; charset=Shift_JIS");
  13. }
  14. else if ("ko".equals(clientLanguage)) {
  15.   request.setCharacterEncoding("EUC-KR");
  16.   response.setContentType("text/html; charset=EUC-KR");
  17. }
  18. else {
  19.   request.setCharacterEncoding("ISO-8859-1");
  20.   response.setContentType("text/html; charset=ISO-8859-1");
  21. }
  22. 需要特别解释一下的是:zh-CN不能用gb2312,因为字符集太小,“朱镕基”不认,所以要放大一下。
复制代码



在程序内部数据传送的问题上(JDBC),有2套思路:1、按i18n.jar中的EncodingSet做(中文用cp936)。2、统一用unicode,但需要在发和送之前要转码方法。我的决定是,新模块的开发选择2,老模块的修改选择1,嘿嘿,理由也很简单,老模块的数据长度已经固定,转unicode后长度上会有问题。

300

主题

2592

回帖

3893

积分

论坛元老

积分
3893
发表于 2003-10-23 12:08:46 | 显示全部楼层
谢谢!很有帮助,省得到处去问了。收藏。
:)
回复

使用道具 举报

327

主题

3264

回帖

3641

积分

荣誉版主

积分
3641
 楼主| 发表于 2003-10-24 11:02:56 | 显示全部楼层
我的帖子中,有一处不够完美,并不能实现完全的国际化,这个问题我来总结一下:
1、程序的每一个环节,都使用unicode(UTF-8)编码,包括编写、编译与执行。
2、对于输入的数据,首先按客户端的系统编码方式解码成unicode,然后接着存储、处理,这里全部都是unicode。
3、对于输出的数据,将数据(肯定是unicode编码),按客户端的系统编码方式编码,然后打到输出设备。

这样的处理,就可以支持国际化了,呵呵。
回复

使用道具 举报

1678

主题

5167

回帖

9302

积分

荣誉版主

沉痛悼念小于……

积分
9302
发表于 2003-10-24 21:56:18 | 显示全部楼层
很有用的帖子,收藏 ;02
回复

使用道具 举报

1678

主题

5167

回帖

9302

积分

荣誉版主

沉痛悼念小于……

积分
9302
发表于 2003-10-29 12:37:15 | 显示全部楼层
前一阵用JSP编网页让中文问题搞的很郁闷,sun也是个大公司了,为什么不能重视一下这个问题呢,从根上解决一下。

解决表单提交的中文问题我认为最简单的只用在最前面加一句
request.setCharacterEncoding("EUC_CN");
回复

使用道具 举报

327

主题

3264

回帖

3641

积分

荣誉版主

积分
3641
 楼主| 发表于 2003-10-29 20:13:33 | 显示全部楼层
最初由 coolfax 发布
[B]前一阵用JSP编网页让中文问题搞的很郁闷,sun也是个大公司了,为什么不能重视一下这个问题呢,从根上解决一下。

解决表单提交的中文问题我认为最简单的只用在最前面加一句
request.setCharacterEncoding("EUC_CN"); [/B]


是啊,这样省心省力,不过,也有2点需要注意:
1、只有servlet2.3以后才支持这个方法。
2、如果牵连upload/download,那么使用setCharacterEncoding要小心,可能会带来问题。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|海浩社区

GMT+8, 2025-9-24 12:32 , Processed in 0.092426 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表