`
cesar2008
  • 浏览: 41153 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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不会有这个问题。
我想这多少也刺激他们迅速的改进。
分享到:
评论
1 楼 ab0123456 2010-10-27  
你好,看了你的文章有感受,同时我想问一个问题,如果提交方式是GET超链接形式,好像上面的方法就不起作用了?

相关推荐

    Java简体繁体转换.rar

    本资源"Java简体繁体转换.rar"提供了一个基于Java的解决方案,用于进行简体中文到繁体中文的转换,以及繁体到简体的转换。以下是关于这个主题的详细知识: 1. **Java语言基础**:Java是一种广泛使用的面向对象的...

    java 繁体与简体互转源码工具类

    这个"java 繁体与简体互转源码工具类"提供了一个方便的解决方案,使得开发者无需深入了解复杂的字符编码和转换机制,就能轻松完成这种转换。以下是关于这个工具类及其组件的详细说明: 首先,`ZHConverter.java`是...

    解决项目简体转繁体

    本项目提供的解决方案旨在帮助开发者处理应用程序中的文字转换问题,无论是将简体中文转化为繁体中文,还是相反的操作。 首先,我们需要了解简体中文和繁体中文的区别。简体中文是中华人民共和国推行的标准化汉字,...

    检验字符串是否包含简体字(针对繁体字和简体字不同的情况)

    下面将详细解释这个知识点,并提供相应的解决方案。 首先,我们要理解简体字和繁体字的区别。简体字是中国大陆广泛使用的汉字形式,而繁体字则常见于台湾、香港、澳门以及海外华人社区。简体字和繁体字虽然表达相同...

    Effctive Java 简体全本

    本书详细介绍了57条对Java程序员具有极高实用价值的经验规则,覆盖了开发人员日常工作中遇到的诸多问题的解决方案。作者通过深入全面地描述Java平台设计专家所使用的技术,为读者指出在进行Java编程时应该做什么、不...

    Java中常见的异常以及解决方案

    ### Java中常见的异常及其解决方案 #### 一、空指针异常 (NullPointerException) **定义:** 空指针异常(`NullPointerException`)是Java中最常见的运行时异常之一,它发生在尝试访问一个空对象引用的属性或调用...

    Thinking in Java简体中文(全)

    A.2 微软的解决方案 A.3 J/Direct A.3.1 @dll.import引导命令 A.3.2 com.ms.win32包 A.3.3 汇集 A.3.4 编写回调函数 A.3.5 其他J/Direct特性 A.4 本原接口(RNI) A.4.1 RNI总结 A.5 Java/COM集成 A.5.1 COM基础 A....

    简体字和繁体字之间的转换

    6. **集成解决方案** 有些软件和在线工具集成了多种转换方法,可以根据输入文本的特点选择最合适的策略。这些工具通常提供用户友好的界面,方便非技术人员使用。 在实际应用中,我们需要根据具体的需求和场景选择...

    《简体和繁体》.zip

    意味着这个压缩包可能包含一个或多个跨平台的解决方案,这些解决方案可以在不需额外配置的情况下,直接在JavaScript环境中运行,并且为Java、Python和C#提供了自动设置或接口,以便于在这些语言中进行简体与繁体的...

    Java Web编程中页面跳转乱码问题的解决方案.pdf

    Java Web编程页面跳转乱码问题的解决方案 Java Web编程是互联网开发领域中应用十分广泛的工具。然而,在实际开发过程中,程序员常常会遇到页面跳转乱码的问题,尤其是中文乱码问题,这些问题不仅消耗程序员大量的...

    java library.zip

    总之,Java Library.zip提供了一套完整的解决方案,让你能够在Java项目中利用C3P0连接池管理和优化对MySQL 5.x数据库的连接,提高应用的性能和可靠性。正确配置和使用这些库将有助于确保数据库操作的高效和稳定。

    Thinking.in.Java简体中文第二版

    ### Thinking.in.Java简体中文第二版 #### 书籍概述 《Thinking in Java》是一本由Bruce Eckel撰写的关于Java编程的经典著作,在业界享有极高的声誉,并被公认为是学习Java语言的最佳教材之一。本书第二版针对Java ...

    英文繁体简体名词对照表

    ### 英文繁体简体名词对照表 #### abort(中止 / 中止) - **定义**:在计算机科学中,“abort”指的是一种中断或取消正在进行中的操作的行为。 - **应用场景**:常用于文件系统操作、进程管理、数据库事务等场景。...

    java 深度历险简体中文

    - **解决具体问题**:书中不仅探讨了Java的内部运作原理,还针对开发者在实际工作中可能遇到的具体问题提供了解决方案。例如,书中提到了使用Borland JBuilder过程中可能出现的`ClassNotFound`错误,这对于使用该...

    Java Web开发中的中文乱码问题分析及解决方案.pdf

    GBK比GB2312更广泛,可以同时处理简体和繁体汉字。Unicode编码是一种通用编码,涵盖了所有语言,而UTF-8编码则是一种变长编码,它兼容ISO8859-1和Unicode,并且在处理英文和中文混合的文本时更为灵活。 在Java Web...

    JavaME源程序代码

    6. **数据存储**:如Record Store API,是JavaME中的本地数据存储解决方案。 通过研究和实践这些JavaME源程序代码,开发者可以掌握如何在资源有限的设备上进行高效编程,了解如何利用JavaME的特性创建跨平台的应用...

    Java Web开发中的乱码问题分析及解决方案研究 (1).pdf

    【解决策略】针对上述问题,可以采取以下解决方案: 1. **统一编码**:确保整个Web应用(包括服务器、数据库、页面、请求参数)都使用相同的字符编码,如UTF-8。 2. **页面声明**:在每个JSP或HTML页面的头部添加`...

    简繁体转换jar包

    值得注意的是,虽然这个jar包提供了一种方便的解决方案,但它可能无法覆盖所有罕见的字词或者特殊的方言表达。对于这些特殊情况,可能需要结合其他工具或服务,如Google的翻译API等,以获得更全面的转换效果。 总的...

    IBM大型机与小型机间汉字转换解决方案

    #### 解决方案一:CICS程序、Java程序与CICS配置结合 1. **CICS程序设计**:首先需要编写专门的CICS程序来处理汉字数据,该程序能够读取输入数据并进行初步的格式转换。这一过程主要是为了确保数据符合后续Java程序...

Global site tag (gtag.js) - Google Analytics