参考博客: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
注意,关键就在于此:此句中间是'&'不是'&'这是因为数据库连结时,在.jsp和.java文件中应该用&号,而XML文件中需要用&
相关推荐
J2EE中文乱码问题终极解决之道 如果看了这个文件之后你还解决不了乱码问题 那就不是我的问题了
J2ee应用中文乱码问题解决方案.doc
Java-J2EE中文问题终极解决之道.doc
Java/J2EE中文问题终极解决之道 Java中文问题一直困扰着很多初学者,如果了解了Java系统的中文问题原理,我们就可以对中文问题能够 采取根本的解决之道。 最古老的解决方案是使用String的字节码转换,这种方案...
j2ee中文乱码问题的解决方法,常用于数据库与服务器之间传值,脚本与JSP页面传值,JSP与JAVA代码之间的传值等。
十一 常见问题和解决方法 36 无法启动J2EE服务器 36 编译出错 37 部署出错 37 J2EE应用程序客户端运行时错误 38 Web客户端运行时错误 39 用检验工具检查问题 39 比较你的EAR文件和样本EAR文件 39 其它异常 39 第二...
使开发者不仅可以比以前更快地发表对市场的新的解决方案,而且其独立于平台、基于组件的 J2EE解决方案不再受任何提供商的产品和应用程序编程界面的限制。 本章将主要从如下几个方面介绍 J2EE: ·J2EE 框架:分布式...
本书讲解使用J2EE核心技术实现企业应用过程中的模式、最佳实践、设计策略以及经过验证的解决方案,涵盖了JSP、servlet、EJB、JMS等技术,其中J2EE模式目录包括21个模式以及大量策略,帮助读者迅速熟练掌握J2EE技术...
开发基于J2EE+SSM框架的信息管理系统中遇到的问题及其解决办法 eg:Navicat过期 Tomact发布 中文乱码等等
中文译名:J2EE设计模式 作者: (美)William Crawford & Jonathan Kaplan <br/>本书一边在持久化和消息通信等领域中描述一些新模式,一边向你说明如何在J2EE应用的上下文中实现许多模式。有助于考虑问题...
Paul J. Perrone 的Building Java Enterprise Systems with J2EE,中文版是J《2EE 构建企业系统 专家级解决方案》
J2EE是一种利用Java 2平台来简化企业解决方案的开发、部署和管理相关的复杂问题的体系结构。J2EE技术的基础就是核心Java平台或Java 2平台的标准版,J2EE不仅巩固了标准版中的许多优点,例如"编写一次、随处运行"的...
无论是独立的html,还是其他程序生成的,如Servlet等,注意在最终的html的< head >和< /head >之间必须加入meta标签,用来指定html中输入字符的编码。
第一章 J2EE快速入门 1.1 J2EE概述 1.1.1 J2EE的来源 1.1.2 J2EE整体框架 1.1.3 从J2EE到JavaEE 1.2 J2EE组件 1.2.1 客户端组件 ...15.11 解决Spring的中文乱码问题 15.12 运行验证程序 15.13 小结
14.12 解决Struts的中文乱码问题 14.13 运行验证程序 14.14 小结 第十五章 在线考试系统 15.1 系统概述 15.2 需求分析 15.2.1 系统用例图 15.2.2 需求规格说明书 15.3 系统设计 15.3.1 设计视图层 15.3.2 设计持久层...
中文文摘 分类号:TP311.5 关键词:J2EE模式 面向方面编程 面向对象编程 模式组合 摘要:本文使用AOP(面向方面编程)实现了部分J2EE模式,解决了它们在OOP(面向对象编程)实现中所碰到的横切问题,并且提高...
14.12 解决Struts的中文乱码问题 14.13 运行验证程序 14.14 小结 第十五章 在线考试系统 15.1 系统概述 15.2 需求分析 15.2.1 系统用例图 15.2.2 需求规格说明书 15.3 系统设计 15.3.1 设计视图层 15.3.2 设计持久层...
本文档含有四种解决struts中出现的中文乱码的方法,只要按步骤,一定可以使用,非常经典哦
实验十三 过滤器解决中文乱码及登录验证 32 一、实验目的 32 二、实验环境 32 三、实验步骤 32 1、创建web过滤器实现form表单post提交的中文乱码 32 2、配置中文乱码过滤器 32 3、创建登录验证的过滤器并配置 32 四...