`
king_tt
  • 浏览: 2112108 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java Web中文问题的几种解决方案

 
阅读更多

摘自王俊标编著的《精通Java Web开发-基于Struts EJB Hibernate JBuilder》一书:

1、页面请求
采用Filter过滤器方式:
web.xml片段

1 ……
2 <!-- filter配置 -->
3 < filter >
4 <!-- filter别名 -->
5 < filter-name > encodingfilter </ filter-name >
6 <!-- 类文件位置 -->
7 < filter-class > login3.EncodingFilter </ filter-class >
8
9 <!-- 定义属性encoding="gb2312"即指定编码类型 -->
10 < init-param >
11 < desription > encodetogb2312 </ desription >
12 < param-name > encoding </ param-name >
13 < param-value > gb2312 </ param-value >
14 </ init-param >
15 </ filter >
16
17 <!-- filter映射配置 -->
18 < filter-mapping >
19 <!-- 定义该filter处理所有格式的请求 -->
20 < filter-name > encodingfilter </ filter-name >
21 < url-pattern > /* </ url-pattern >
22 </ filter-mapping >
23 ……

EncodingFilter.java

1 import java.io.IOException;
2
3 import javax.servlet. * ;
4 import javax.servlet.http.HttpServlet;
5
6 public class EncodingFilter extends HttpServlet
7 implements Filter {
8
9 private FilterConfigfilterConfig;
10
11 private StringtargetEncoding = null ;
12
13 public void init(FilterConfigfilterConfig) throws ServletException {
14 this .filterConfig = filterConfig;
15 this .targetEncoding = this .filterConfig.getInitParameter( " encoding " );
16 }

17
18 public void doFilter(ServletRequestrequest,ServletResponseresponse,
19 FilterChainchain) throws IOException,ServletException {
20 try {
21 System.out.println( " targetEncoding: " + targetEncoding + " /n " );
22 request.setCharacterEncoding(targetEncoding);
23 chain.doFilter(request,response);
24 }
catch (ServletExceptionsx) {
25 filterConfig.getServletContext().log(sx.getMessage());
26 }
catch (IOExceptioniox) {
27 filterConfig.getServletContext().log(iox.getMessage());
28 }

29 }

30
31 public void destroy() {
32 this .filterConfig = null ;
33 this .targetEncoding = null ;
34 }

35 }

36


2、Web容器编码
在Tomcat的的源代码中的getParameter()方法,用户调用request.getParameter()方法时,首先调用parsetParameters()方法,在这里面将编码进行转换。如:
String s_target = new String (s_source.getBytes("iso-8859-1"), "gb2312);

3、数据库
MySQL 中文问题的主要原因是:它对数据进行编码时,采用了和底层的操作系统所不同的编码。通常MySQL在中文Windows平台上正确的编码方式是GBK。因 此只要将MySQL安装目录下的my.ini文件中的default-character-set选项设为GBK即可。

4、响应结果
对于Servlet的代码处理,可以使用:
……
respsonse.setContentType("text/html;charset=GB2312");
……
对于JSP文件,可以在开头部分添加如下声明:
……
<%@ page contentType="text/html;charset=GB2312" %>
……
对于HTML页面文件,则在开头部分添加声明如下:
……
<head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=GB2312">
</head>
……
5、XML文件
在采用"UTF-8"方式编码的情况下,使用XML文件存储中文数据常常会出现乱码的问题,建议使用"GB2312":
<?xml version='1.0' encoding="GB2312"

摘自【http://www.blogjava.net/tanzek/archive/2008/03/20/187407.html】
分享到:
评论

相关推荐

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    全书一共被压缩为5个rar,这是第二个!...21.2 中文乱码问题的解决方案 614 21.3 使用过滤器解决中文问题 616 21.4 让tomcat支持中文文件名 620 21.5 国际化与本地化 621 21.5.1 locale 621.. 21.5.2 资源包 623 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    全书一共被压缩为5个rar,这是第三个!...21.2 中文乱码问题的解决方案 614 21.3 使用过滤器解决中文问题 616 21.4 让tomcat支持中文文件名 620 21.5 国际化与本地化 621 21.5.1 locale 621.. 21.5.2 资源包 623 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    全书一共被压缩为5个rar,这是第四个!...21.2 中文乱码问题的解决方案 614 21.3 使用过滤器解决中文问题 616 21.4 让tomcat支持中文文件名 620 21.5 国际化与本地化 621 21.5.1 locale 621.. 21.5.2 资源包 623 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    全书一共被压缩为5个rar,这是第五个!...21.2 中文乱码问题的解决方案 614 21.3 使用过滤器解决中文问题 616 21.4 让tomcat支持中文文件名 620 21.5 国际化与本地化 621 21.5.1 locale 621.. 21.5.2 资源包 623 ...

    JavaWeb应用中文乱码的解决方案 (1).pdf

    分析了java Web应用中产生中文乱码的原因,归纳总结了产生中文乱码的几种情况,根据每种情况给出了多种解决方案,并分析了每种解决方案各自的优缺点以及适用场合,为java Web程序员提供了参考和借鉴。

    网站性能优化 Web开发 JSP java

    1.页面静态化 html 解决方案:(Velocity/Freemarker)Velocity可编程式配置使用相对路径可以解决移植性。 2.缓存技术(当数据更新比较快,几秒钟更新一次,或者需要实时反映数据变化,或者页面具有很多种风格,不...

    JAVA上百实例源码以及开源项目

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    JAVA上百实例源码以及开源项目源代码

    Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来...

    java开源包11

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    java开源包6

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    java开源包9

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    java开源包4

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    java开源包101

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    java开源包5

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    java开源包8

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    java开源包10

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    java开源包3

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    java开源包1

    JSTUN 是另外一个用来解决穿越 NAT 进行通讯的 Java 解决方案,是 STUN 协议的 Java实现。 在浏览器上运行Java程序 Doppio DoppioVM 是一个可在浏览器上直接运行 Java 项目的系统,无需任何插件支持。目前它包含一...

    java面试题

    并发问题解决方案 59 71.7. Hibernate是如何延迟加载? 60 71.8. Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系) 60 71.9. 说下Hibernate的缓存机制 60 71.10. Hibernate的查询方式 60 71.11. 如何...

    Java编程思想(完整版)

    Java除了可解决传统的程序设计问题以外,还能解决World Wide Web(万维网)上的编程问题。 1.11.1 什么是Web? 1.11.2 客户端编程 1.11.3 服务器端编程 1.11.4 一个独立的领域:应用程序 1.12 分析和设计 1.12.1 ...

Global site tag (gtag.js) - Google Analytics