`

J2ee中文问题的解决

    博客分类:
  • Java
 
阅读更多

参考博客:http://www.blogjava.net/renyangok/articles/67825.html

 

第一, 文件的的编码方式其实就包括两方面:存和取, 存文件必须以一种编码存;读文件也必须以一种编码读。 如果存取按照相同的编码方式,则不会有问题,关键就是很多时候存取的方式不一致,产生乱码。 ,如不特别设置取系统默认的编码,中文windows为GBK编码。

从.java->.class过程是,先编写.java文件并按莫种编码方式保存,然后用javac方法编译此文件,注意如.java没按系统默认编码保存则要带encoding参数指明实际编码,否则出错,生成的.class文件存为系统默认编码。

从.jsp->.java->.class,先存为某种编码的.jsp文件,然后tomcat根据pageEncoding读取并转化为servlet存为系统默认编码,然后同上面.java->.class过程。

第 二,IDE的encoding为对系统下文件打开的解码方式或保存的编码方式。特例:如果.jsp文件有<%@ page language="java" pageEncoding="UTF-8"%>,则eclipse会自动存为UTF-8方式,不管eclipse的encoding是什么,这也是 eclipse的聪明之处。

第三,
pageEncoding="UTF-8"表示此文件的编码方式,必须与此文件存储方式一致 (所以eclipse会首选根据它来存文件),tomcat根据这个来读此.jsp文件并编译为servlet(至于编译成的.java和.class文 件应该为tomcat服务器默认编码)。
contentType="text/html;charset=UTF-8"表示当服务器给浏览器传页面文件时编码方式为UTF-8,形式为HTML。例如:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page contentType="text/html;charset=GBK"%>
<html>
 <head>
  <title>test</title>
 </head>
 <body>
  我是个好人
 </body>
</html>

表示本jsp文件存为UTF-8字符集,当浏览器打开此页面后,查看原码就会发现源码为GBK字符集。

第四,
request.setCharacterEncoding("UTF-8")是把提交内容的字符集设为UTF-8
response.setCharacterEncoding("UTF-8")可以把页面中的<%@ page contentType="text/html;charset=iso8859-1"%>换为charset=UTF-8,是给告诉浏览器我这个文件的编码方式。

第 五,表单提交:无论何种表单提交都可以在后台的java文件中通过String des = new String(s.getBytes("iso8859-1"),"UTF-8");来转换成你想要的UTF-8编码方式。但如果每处都加词句太麻烦,故 分post和get两种方式区分提交(tomcat5以后分开处理,之前处理方式一样,即都可以用 request.setCharacterEncoding("UTF-8")方法处理,不过tomcat5以后get提交方法用此语句无效)。
1,post提交的数据:
程序加上org.springframework.web.filter.CharacterEncodingFilter过滤器.
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>

<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>

因为规范要求浏览器提交数据都要用utf8编码,所以这里设置编码方式为UTF8.

特别注意:
a,这个过滤器只是简单的调用:request.setCharacterEncoding(this.encoding);
在 这个语句之前不能调用任何的request.getParameter()方法,否则会设置tomcat的缺省字符集为"ISO-8859-1",并且使 setCharacterEncoding的调用失效.所以在这个过滤器之前的过滤器中不能有对getParameter这类方法的调用,比较安全的做法 就是把这个过滤器尽量靠前放.
b,在server.xml中不能加上<Valve className="org.apache.catalina.valves.RequestDumperValve"/>
这个value也设置tomcat的缺省字符集为"ISO-8859-1",使setCharacterEncoding的调用失效.可能其他的value也有这个问题,我没有测试过.
如果要观察http请求参数,可以考虑用过滤器或者其他工具,例如ethereal(http://www.ethereal.com/)

2,get提交的数据:
两种情况:
a,如果从地址栏直接输入汉字,则一般编码为"GBK",需要用
new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK")
取出
b,如果是页面超连接连接中带的汉字,则编码根据页面编码的不同而不同,如果页面的
content="text/html; charset=utf-8",则在tomcat/conf/server.xml中的配置文件中:
<!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 8080 -->
<Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000" useBodyEncodingForURI="true"
disableUploadTimeout="true" />

加上:useBodyEncodingForURI="true"即可正常使用getParameter取出正确内容.
如果content="text/html; charset=GBK",需用
new String(request.getParameter("something").getBytes("ISO-8859-1"),"GBK")
取出,其他情况类似.

总结:
1,所有页面使用utf8编码,
2,服务器加上过滤器,
3,server.xml中不要使用
<Valve className="org.apache.catalina.valves.RequestDumperValve"/>
4,server.xml文件加上useBodyEncodingForURI="true"
这样应该可以搞定大多数前台的中文问题.至于地址栏输入中文,不支持也罢,一般的程序很少要求
从这里输入.

第六,连接数据库
 

1、mysql配置文件:
修改mysql在windows\my.ini里default-character-set=utf-8

2、mysql里数据库和表也都设为utf8_unicode_ci

3、数据库连结:jdbc:mysql://localhost/mydb?useUnicode=true&characterEncoding=utf-8
注意,关键就在于此:此句中间是'&'不是'&amp;'这是因为数据库连结时,在.jsp和.java文件中应该用&号,而XML文件中需要用&amp

分享到:
评论

相关推荐

    J2EE中文问题终极解决之道

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

    J2EE 指南 J2EE中文教材

    - **常见问题和解决方法**:列举了一些常见的问题及其解决方案。 - **第三章:企业Bean**: - **企业Bean概述**:概述了EJB的概念和用途。 - **会话Bean**:深入探讨了会话Bean的类型和使用场景。 - **Entity...

    J2EE API(J2EE中文帮助文档/J2EE中文版指南/JavaEE_CN)

    J2EE中文帮助文档是专为中国开发者设计的官方文档,旨在帮助开发者理解和使用J2EE API。这个文档通常包括了J2EE各个部分的详细说明、API参考、教程以及示例代码,使得开发者能够更容易地理解复杂的J2EE概念和技术。...

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

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

    J2ee应用中文乱码问题解决方案.doc

    总结来说,解决J2EE应用中文乱码问题的关键在于理解字符集的原理,并在每个可能引起乱码的环节进行相应的编码设置。通过统一编码标准,尤其是使用广泛支持的UTF-8,可以显著减少乱码出现的可能性。在开发过程中,...

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

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

    J2EE api 中文版

    在使用J2EE API中文版时,如果遇到乱码问题,可能是因为文件的字符编码不匹配。解决这个问题通常需要将文件或项目设置为UTF-8编码。对于文档,使用支持更改编码的编辑器(如Notepad++或IntelliJ IDEA),将其编码...

    J2EE中文版

    **J2EE中文版** Java 企业版(Java 2 Platform, Enterprise Edition,简称 J2EE)是一个由 Sun Microsystems(现已被 Oracle 收购)开发的开放标准,用于构建分布式、多层的企业级应用程序。J2EE 提供了一个集成的...

    最全,最新,j2ee中文api

    这个文件可能包含了使用J2EE中文API的一些注意事项、建议或快速入门指南,可能涵盖了如何高效查阅API,如何解决常见问题等内容,是初学者的重要指导资料。 **多多软件站-最安全的下载站.url** 这可能是一个链接到...

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

    总之,解决Java/J2EE中的中文乱码问题需要深入理解编码机制,合理配置系统环境,统一应用系统编码,并在各个层次进行适配和转换。通过以上所述的多种策略和方法,开发者可以有效地预防和解决乱码问题,确保应用的...

    J2EE中文版指南 CHM格式 带全文检索

    十一 常见问题和解决方法 36 无法启动J2EE服务器 36 编译出错 37 部署出错 37 J2EE应用程序客户端运行时错误 38 Web客户端运行时错误 39 用检验工具检查问题 39 比较你的EAR文件和样本EAR文件 39 其它异常 39 第二...

    J2EE Tutorial中文版

    J2EE的核心目标是提供一种可移植性、安全性和可伸缩性的解决方案,以简化企业级软件开发。 **二、J2EE架构** J2EE架构基于分层模型,主要分为以下几层: 1. **客户端层(Client Layer)**:用户界面,通常包括Web...

    J2EE中文教材.pdf

    ### J2EE中文教材知识点概览 #### 一、序言与背景介绍 - **序言**: 序言部分简要介绍了Java语言的历史背景和发展历程。1993年,作者加入太阳公司,并参与了Oak语言(即后来的Java)的开发工作。这段经历为后续J2EE...

    jsp j2ee5 j2ee6 中文帮助文档打包

    "jsp api j2ee中文帮助"标签进一步强调了关键内容:API(Application Programming Interface)通常指的是官方提供的接口文档,对于开发者理解和使用JSP和J2EE的各个组件至关重要。中文帮助则意味着这些文档是用中文...

    J2EE Tutorial中文版.

    **J2EE(Java 2 Platform, Enterprise Edition)教程中文版**是一份全面且深入的指导资料,旨在帮助开发者理解和掌握J2EE平台的核心概念、技术和应用。J2EE是Oracle公司(原Sun Microsystems)推出的用于构建企业级...

    J2EE中文教材

    ### J2EE中文教材知识点概览 #### 一、J2EE技术介绍 - **基本概念**:J2EE(Java 2 Platform, Enterprise Edition)是Sun Microsystems为满足企业级应用的需求而设计的一种标准,它提供了构建分布式多层应用程序所...

    J2EE+Tutorial中文版,《J2EE指南》中文版

    通过"J2EE+Tutorial中文版.chm"这个文档,学习者可以了解到J2EE的完整体系,理解各种组件的作用,掌握如何设计和部署J2EE应用,以及如何解决开发过程中遇到的问题。这个教程还可能包括实际的示例代码和练习,帮助...

    J2EE外文翻译(J2EE和企业解决方案及其应用框架)

    **J2EE(Java 2 Platform, Enterprise Edition)**是Java平台上用于构建企业级应用程序的框架,它由Sun Microsystems(现已被Oracle收购)在2000年代初推出。J2EE提供了一个全面的开发环境,支持分布式计算、多层...

Global site tag (gtag.js) - Google Analytics