`

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指南中文版J2EE指南中文版

    根据提供的文件信息,我将生成相关的知识...J2EE 指南中文版提供了一个完整的解决方案,帮助开发者快速构建企业级应用程序。该指南包括 J2EE 平台技术、J2EE 应用程序开发、J2EE 组件开发和 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