第一,文件的的编码方式其实就包括两方面:存和取,存文件必须以一种编码存;读文件也必须以一种编码读。如果存取按照相同的编码方式,则不会有问题,关键就是很多时候存取的方式不一致,产生乱码。,如不特别设置取系统默认的编码,中文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
注意,关键就在于此:此句中间是'&'不是'&'这是因为数据库连结时,在.jsp和.java文件中应该用&号,而XML文件中需要用&
分享到:
相关推荐
### J2EE中文乱码问题终极解决之道 在开发基于J2EE的应用系统时,中文乱码问题是开发者经常遇到的一个难题。本篇文章旨在提供一种全面、深入的解决方案,帮助开发者彻底解决这一问题。 #### 一、理解编码机制 在...
- **常见问题和解决方法**:列举了一些常见的问题及其解决方案。 - **第三章:企业Bean**: - **企业Bean概述**:概述了EJB的概念和用途。 - **会话Bean**:深入探讨了会话Bean的类型和使用场景。 - **Entity...
J2EE中文帮助文档是专为中国开发者设计的官方文档,旨在帮助开发者理解和使用J2EE API。这个文档通常包括了J2EE各个部分的详细说明、API参考、教程以及示例代码,使得开发者能够更容易地理解复杂的J2EE概念和技术。...
### Java-J2EE中文问题终极解决之道 #### 一、问题背景与挑战 在Java及J2EE领域中,中文支持一直是开发者面临的一大难题。尤其是对于那些初学者来说,中文字符的正确显示与处理往往成为项目的绊脚石。本文旨在探讨...
总结来说,解决J2EE应用中文乱码问题的关键在于理解字符集的原理,并在每个可能引起乱码的环节进行相应的编码设置。通过统一编码标准,尤其是使用广泛支持的UTF-8,可以显著减少乱码出现的可能性。在开发过程中,...
### Java/J2EE中文问题终极解决之道 在Java/J2EE开发过程中,中文字符编码问题一直是困扰许多开发者尤其是初学者的一大难题。对于此类问题的根本解决方法不仅需要理解Java系统内部如何处理字符编码,还需要掌握一...
在使用J2EE API中文版时,如果遇到乱码问题,可能是因为文件的字符编码不匹配。解决这个问题通常需要将文件或项目设置为UTF-8编码。对于文档,使用支持更改编码的编辑器(如Notepad++或IntelliJ IDEA),将其编码...
**J2EE中文版** Java 企业版(Java 2 Platform, Enterprise Edition,简称 J2EE)是一个由 Sun Microsystems(现已被 Oracle 收购)开发的开放标准,用于构建分布式、多层的企业级应用程序。J2EE 提供了一个集成的...
这个文件可能包含了使用J2EE中文API的一些注意事项、建议或快速入门指南,可能涵盖了如何高效查阅API,如何解决常见问题等内容,是初学者的重要指导资料。 **多多软件站-最安全的下载站.url** 这可能是一个链接到...
总之,解决Java/J2EE中的中文乱码问题需要深入理解编码机制,合理配置系统环境,统一应用系统编码,并在各个层次进行适配和转换。通过以上所述的多种策略和方法,开发者可以有效地预防和解决乱码问题,确保应用的...
十一 常见问题和解决方法 36 无法启动J2EE服务器 36 编译出错 37 部署出错 37 J2EE应用程序客户端运行时错误 38 Web客户端运行时错误 39 用检验工具检查问题 39 比较你的EAR文件和样本EAR文件 39 其它异常 39 第二...
J2EE的核心目标是提供一种可移植性、安全性和可伸缩性的解决方案,以简化企业级软件开发。 **二、J2EE架构** J2EE架构基于分层模型,主要分为以下几层: 1. **客户端层(Client Layer)**:用户界面,通常包括Web...
### J2EE中文教材知识点概览 #### 一、序言与背景介绍 - **序言**: 序言部分简要介绍了Java语言的历史背景和发展历程。1993年,作者加入太阳公司,并参与了Oak语言(即后来的Java)的开发工作。这段经历为后续J2EE...
"jsp api j2ee中文帮助"标签进一步强调了关键内容:API(Application Programming Interface)通常指的是官方提供的接口文档,对于开发者理解和使用JSP和J2EE的各个组件至关重要。中文帮助则意味着这些文档是用中文...
**J2EE(Java 2 Platform, Enterprise Edition)教程中文版**是一份全面且深入的指导资料,旨在帮助开发者理解和掌握J2EE平台的核心概念、技术和应用。J2EE是Oracle公司(原Sun Microsystems)推出的用于构建企业级...
### J2EE中文教材知识点概览 #### 一、J2EE技术介绍 - **基本概念**:J2EE(Java 2 Platform, Enterprise Edition)是Sun Microsystems为满足企业级应用的需求而设计的一种标准,它提供了构建分布式多层应用程序所...
通过"J2EE+Tutorial中文版.chm"这个文档,学习者可以了解到J2EE的完整体系,理解各种组件的作用,掌握如何设计和部署J2EE应用,以及如何解决开发过程中遇到的问题。这个教程还可能包括实际的示例代码和练习,帮助...
**J2EE(Java 2 Platform, Enterprise Edition)**是Java平台上用于构建企业级应用程序的框架,它由Sun Microsystems(现已被Oracle收购)在2000年代初推出。J2EE提供了一个全面的开发环境,支持分布式计算、多层...