`

J2EE中文问题终极解决之道- -

阅读更多

J2EE中文问题终极解决之道- -

 

 

Java/J2EE中文问题终极解决之道

Java中文问题一直困扰着很多初学者,如果了解了Java系统的中文问题原理,我们就可以对中文问题能够采取根本的解决之道。

最古老的解决方案是使用String的字节码转换,这种方案问题是不方便,我们需要破坏对象封装性,进行字节码转换。

还有一种方式是对J2EE容器进行编码设置,如果J2EE应用系统脱离该容器,则会发生乱码,而且指定容器配置不符合J2EE应用和容器分离的原则。

在Java内部运算中,涉及到的所有字符串都会被转化为UTF-8编码来进行运算。那么,在被Java转化之前,字符串是什么样的字符集? Java总是根据操作系统的默认编码字符集来决定字符串的初始编码,而且Java系统的输入和输出的都是采取操作系统的默认编码。

因此,如果能统一Java系统的输入、输出和操作系统3者的编码字符集合,将能够使Java系统正确处理和显示汉字。这是处理Java系统汉字的一个原则,但是在实际项目中,能够正确抓住和控制住Java系统的输入和输出部分是比较难的。J2EE中,由于涉及到外部浏览器和数据库等,所以中文问题乱码显得非常突出。

J2EE应用程序是运行在J2EE容器中。在这个系统中,输入途径有很多种:一种是通过页面表单打包成请求(request)发往服务器的;第二种是通过数据库读入;还有第3种输入比较复杂,JSP在第一次运行时总是被编译成Servlet,JSP中常常包含中文字符,那么编译使用javac时,Java将根据默认的操作系统编码作为初始编码。除非特别指定,如在Jbuilder/eclipse中可以指定默认的字符集。

输出途径也有几种:第一种是JSP页面的输出。由于JSP页面已经被编译成Servlet,那么在输出时,也将根据操作系统的默认编码来选择输出编码,除非指定输出编码方式;还有输出途径是数据库,将字符串输出到数据库。

由此看来,一个J2EE系统的输入输出是非常复杂,而且是动态变化的,而Java是跨平台运行的,在实际编译和运行中,都可能涉及到不同的操作系统,如果任由Java自由根据操作系统来决定输入输出的编码字符集,这将不可控制地出现乱码。

正是由于Java的跨平台特性,使得字符集问题必须由具体系统来统一解决,所以在一个Java应用系统中,解决中文乱码的根本办法是明确指定整个应用系统统一字符集。

指定统一字符集时,到底是指定ISO8859_1 、GBK还是UTF-8呢?

(1)如统一指定为ISO8859_1,因为目前大多数软件都是西方人编制的,他们默认的字符集就是ISO8859_1,包括操作系统Linux和数据库MySQL等。这样,如果指定Jive统一编码为ISO8859_1,那么就有下面3个环节必须把握:

开发和编译代码时指定字符集为ISO8859_1。

运行操作系统的默认编码必须是ISO8859_1,如Linux。

在JSP头部声明:。

(2)如果统一指定为GBK中文字符集,上述3个环节同样需要做到,不同的是只能运行在默认编码为GBK的操作系统,如中文Windows。

统一编码为ISO8859_1和GBK虽然带来编制代码的方便,但是各自只能在相应的操作系统上运行。但是也破坏了Java跨平台运行的优越性,只在一定范围内行得通。例如,为了使得GBK编码在linux上运行,设置Linux编码为GBK。

那么有没有一种除了应用系统以外不需要进行任何附加设置的中文编码根本解决方案呢?

将Java/J2EE系统的统一编码定义为UTF-8。UTF-8编码是一种兼容所有语言的编码方式,惟一比较麻烦的就是要找到应用系统的所有出入口,然后使用UTF-8去“结扎”它。

一个J2EE应用系统需要做下列几步工作:

开发和编译代码时指定字符集为UTF-8。JBuilder和Eclipse都可以在项目属性中设置。

使用过滤器,如果所有请求都经过一个Servlet控制分配器,那么使用Servlet的filter执行语句,将所有来自浏览器的请求(request)转换为UTF-8,因为浏览器发过来的请求包根据浏览器所在的操作系统编码,可能是各种形式编码。关键一句:

request.setCharacterEncoding("UTF-8")。

网上有此filter的源码,Jdon框架源码中com.jdon.util.SetCharacterEncodingFilter

需要配置web.xml 激活该Filter。

在JSP头部声明:。

在Jsp的html代码中,声明UTF-8:

 

设定数据库连接方式是UTF-8。例如连接MYSQL时配置URL如下:

jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8

一般数据库都可以通过管理设置设定UTF-8

其他和外界交互时能够设定编码时就设定UTF-8,例如读取文件,操作XML等。

笔者以前在Jsp/Servlet时就采取这个原则,后来使用Struts、Tapestry、EJB、Hibernate、Jdon等框架时,从未被乱码困扰过,可以说适合各种架构。希望本方案供更多初学者分享,减少Java/J2EE的第一个拦路虎,也避免因为采取一些临时解决方案,导致中文问题一直出现在新的技术架构中。

- 作者: wsw 2006年03月10日, 星期五 10:56

Trackback

你可以使用这个链接引用该篇日志 http://publishblog.blogdriver.com/blog/tb.b?diaryID=1148157

回复

- 评论人:114qq

Sat Mar 11 03:47:48 CST 2006  作者邮箱   作者Blog

...

<script> if(getCookie('userID') == null){ document.write('<tr><td width="70">发布人:</td>'); document.write('<td width="150"> <input name="remark.authorNameFUI" type="text" size="20" class="inputStyle" maxlength="20"></td>'); document.write('<td width="70">邮箱:</td>'); document.write('<td width="435"> <input name="remark.authorEmail" type="text" size="20" class="inputStyle" maxlength="40"></td>'); document.write('</tr><tr><td>主 页:</td>'); document.write('<td colspan="3"> <input name="remark.authorURL" type="text" class="inputStyle" value="HTTP://" size="63" maxlength="40"></td></tr>'); }else{ document.write('<input type="hidden" name="remark.authorNameFUI" value="Blogdriver">'); } </script>
发布人: 邮箱:
主 页:
评论内容:
               

<script type="text/javascript"></script>

分享到:
评论

相关推荐

    geronimo-j2ee-management_1.1_spec-1.0.1-API文档-中文版.zip

    包含翻译后的API文档:geronimo-j2ee-management_1.1_spec-1.0.1-javadoc-API文档-中文(简体)版.zip 对应Maven信息:groupId:org.apache.geronimo.specs,artifactId:geronimo-j2ee-management_1.1_spec,version...

    J2EE中文问题终极解决之道

    ### J2EE中文乱码问题终极解决之道 在开发基于J2EE的应用系统时,中文乱码问题是开发者经常遇到的一个难题。本篇文章旨在提供一种全面、深入的解决方案,帮助开发者彻底解决这一问题。 #### 一、理解编码机制 在...

    geronimo-j2ee-management_1.1_spec-1.0.1-API文档-中英对照版.zip

    包含翻译后的API文档:geronimo-j2ee-management_1.1_spec-1.0.1-javadoc-API文档-中文(简体)-英语-对照版.zip 对应Maven信息:groupId:org.apache.geronimo.specs,artifactId:geronimo-j2ee-management_1.1_spec...

    Java-J2EE中文问题终极解决之道.doc

    ### Java-J2EE中文问题终极解决之道 #### 一、问题背景与挑战 在Java及J2EE领域中,中文支持一直是开发者面临的一大难题。尤其是对于那些初学者来说,中文字符的正确显示与处理往往成为项目的绊脚石。本文旨在探讨...

    Java/J2EE中文问题终极解决之道

    ### Java/J2EE中文问题终极解决之道 在Java/J2EE开发过程中,中文字符编码问题一直是困扰许多开发者尤其是初学者的一大难题。对于此类问题的根本解决方法不仅需要理解Java系统内部如何处理字符编码,还需要掌握一...

    geronimo-j2ee-management_1.0_spec-1.1.jar

    geronimo-j2ee-management_1.0_spec-1.1.jar

    J2EE------- 全面简介

    ### J2EE全面简介 #### 一、J2EE概念 Java 2 Platform, Enterprise Edition (J2EE) 是一种企业级应用开发平台标准,它基于 Java 语言,并且为开发分布式多层 Web 应用提供了强大的支持。J2EE 的主要目标是使企业级...

    j2ee中文乱码问题终极解决之道

    尽管上述方法可以在一定程度上解决乱码问题,但最好的解决之道是建立一个完整的编码管理策略,涵盖应用的输入、输出以及中间处理的各个环节。在设计阶段就考虑到字符集的兼容性,避免在后期修复导致的复杂性。同时,...

    J2EE求职简历 ----- Matrix

    这本书是Bruce Eckel的经典之作,对深入理解Java语言有极大帮助,特别是对于J2EE开发者来说,理解Java的基础原理和高级特性至关重要。表明求职者可能对提升自身技术能力有持续的热情和投入。 综上所述,一份优秀的...

    J2EE成品项目压缩包----OA系统

    在J2EE平台上构建的OA系统,充分利用了Java企业版(Java 2 Platform, Enterprise Edition)的多层架构、可扩展性和跨平台优势,为企业提供了稳定且功能丰富的办公自动化解决方案。 **J2EE技术栈** J2EE是Java开发...

    信息办公基于Ajax+J2EE的MicroERP源码下载-microerp-0.1.rar

    [信息办公]基于Ajax+J2EE的MicroERP源码下载_microerp-0.1 这两年太卷了,毕设和毕业 答辩竞争激烈,越写越卷,没有创新和亮点的毕业答辩基本达不到老师的要求。 现在学长为你们准备计算机毕设JSP项目,需要的自取哦...

    geronimo-j2ee-connector_1.5_spec-1.0.1.jar

    geronimo-j2ee-connector_1.5_spec-1.0.1.jar

    Expert One-on-One J2EE Design and Development

    The results of using J2EE in practice are often disappointing: applications are often slow, unduly complex, and take too long to develop. Rod Johnson believes that the problem lies not in J2EE itself...

    j2ee-1_4-doc-tutorial

    **Java 2 Platform, Enterprise Edition (J2EE) 1.4 教程文档** Java 2 Platform, Enterprise Edition(J2EE)1.4 是一个用于构建企业级分布式应用程序的平台,它提供了多种服务、API 和服务器端的运行时环境。这个...

    J2EE-API-7和J2EE-API-6中英文对照版

    **J2EE (Java 2 Platform, Enterprise Edition)** 是Java平台的一个版本,专注于服务器端的软件开发,尤其适合构建和部署分布式企业级应用程序。J2EE API是它的一部分,提供了丰富的接口和类库,用于开发各种功能,...

    中文版EXPERT-ONE-ON-ONE-J2EE-DEVELOPMENT-WITHOUT-EJB.part2.rar(3-3)

    中文版EXPERT-ONE-ON-ONE-J2EE-DEVELOPMENT-WITHOUT-EJB.part2.rar

    J2EE完全参考手册-J2EE概述-pdf

    **J2EE完全参考手册-J2EE概述** Java 企业版(Java 2 Platform, Enterprise Edition,简称 J2EE)是 Oracle ...通过深入学习和实践,你可以熟练掌握 J2EE 技术,为构建高效、稳定和可扩展的企业解决方案打下坚实基础。

    基于Ajax+J2EE的MicroERP源码下载-microerp-0.1.zip

    基于Ajax+J2EE的MicroERP源码下载_microerp-0.1.zip

    J2EE程序员必读书籍:Expert One-on-One J2EE Development without EJB

    《一对一专家级 J2EE 开发无需 EJB》是由 Rod Johnson 和 Juergen Hoeller 共同编写的经典著作,是 Java 架构师和 J2EE 程序员必读的重要参考资料之一。本书于 2004 年由 Wiley Publishing, Inc. 出版,主要面向已经...

Global site tag (gtag.js) - Google Analytics