解决基于tomcat的web应用乱码问题 - J2EE开发者 - web思想社区 关注互联网平台级架构设计,UNIX/LINUX系统管理,项目管理,个人职业规划及RIA,CSS/JS/XML,ASP,

来源:百度文库 编辑:神马文学网 时间:2024/04/27 14:42:13



我想只要是在tomcat上做过涉及中文处理的web应用的人几乎都会遇到这个问题,起初遇到这个问题很是令人头疼,因为在网上搜了很多解决方案来尝试,最终得到的中文字符还是变成了火星的泰坦文。原因不是因为网上的方法不对,而是网上的东西都太散了,只能解决一个点的问题,然而当整个系统运行起来的时候还是可能会出现乱码。那么这究竟是什么原因呢?根据我的实际应用情况,我系统地总结了一下可能出现乱码的情况和解决的方法。

先说说乱码的原理,其实归根结底就是编码和解码时所使用的格式不一致,或者有些编码格式根本不支持的文字类型。例如一个中文字符串编码的时候采用的是“UTF-8”,解码的时候却使用“ISO-8859-1”,这样就会产生乱码。

了解了乱码产生的基本原理之后,我们来看看一个基于tomcat的web应用到底在哪些环节可能出现乱码问题。通过上面的乱码原理简述,我们可以知道,产生乱码的地方一定都是有涉及到编解码的地方。从我遇到的乱码情况来看,出现乱码的地方大概会有以下几处:一是客户端和服务端之间传输的内容出现乱码;二是服务端和数据库之间出现乱码;三是服务端和应用服务器之间出现乱码。其实无论是哪里出现乱码,解决的方法都是一样的,就是统一编解码格式。

对于第一类情况,即客户端和服务端之间出现乱码的解决。首先看看服务端向客户端输出产生乱码的情况。我们以jsp为例。一般jsp文件头部会像下面这样:

  1. <%@ page contentType=”text/html; charset= ISO-8859-1″ pageEncoding=” ISO-8859-1″%>
复制代码

这里是jsp文件默认的字符集和编码格式都是ISO-8859-1。ISO-8859-1是不支持中文的。所以如果一个jsp文件采用这样的头部,而其中又包含有输出到客户端的中文的话,那么当客户端访问该页面时,所有的中文都会显示成乱码。这种情况是编码格式原生就不支持中文的情况。另外一种情况就是编码格式不统一的情况,请看下面这个jsp文件头部:

  1. <%@ page contentType=”text/html; charset=ISO-8859-1″ pageEncoding=”UTF-8″%>
复制代码

在这里我指定了页面的编码格式为UTF-8,而contentType中声明的字符集却是ISO-8859-1,这样,在客户端访问该页面的时候,中文依然会是乱码。所以解决这个问题的要点就是要使用统一的编码,并且该编码要支持中文,像下面这样,中文就可以正确显示了:

  1. <%@ page contentType=”text/html; charset=UTF-8″ pageEncoding=”UTF-8″%>
复制代码

再来讲讲客户端向服务端提交数据的时候出现乱码的解决。当我们通过form向服务端提交数据的时候,浏览器会帮我们把数据先进行编码后再提交,我们可以通过以下方式来指定浏览器如何进行编码,在html文件中加上如下这句话:

复制代码

这里就指定了提交到服务端的数据采用UTF-8编码,当然这里只是指定了提交的数据编码格式,还需要在服务端对接受到的请求做同样的字符集设置才行,如下:

  1. request.setCharacterEncoding(”UTF-8″);
复制代码

这样,服务端接受到请求后取出来的参数就能正确解码成中文。

第二种情况就是服务端和数据库之间出现的乱码。以mysql为例,一般我们配置数据源地址都是这样的:

复制代码

假如数据库的编码格式是utf-8的,这个时候假如服务端发送给数据库的数据的编码格式不是utf-8的话,存入数据库的数据就会变成乱码。这个时候我们可以通过在配置数据源的时候明确指定编码格式来解决这个问题,配置如下:

复制代码

可以看到只是在原来配置的基础上增加了一些参数。

    第三种情况是服务端和应用服务器(也就是tomcat)之间的乱码问题。这个问题不太好发现,因为最开始我遇到这个问题的时候,我从前端html的字符编 码到数据库字符编码都查遍了,发现所有的编码都是统一的,而且也是支持中文,但是还是会出现乱码。费了很多周折,查了很多资料才发现原来是应用服务器的问 题,因为tomcat默认的字符集是ISO-8859-1,所以当使用中文时就会出现乱码。还好这个问题解决起来也是比较简单的。首先在tomcat的安 装目录下找到conf文件夹,打开该文件夹中的server.xml文件,不同的tomcat版本这个文件可能会有所差别,我用的 tomcat6.0.18,将其中相应的配置修改如下:


  1.                connectionTimeout=”20000″
  2.                redirectPort=”8443″
  3. URIEncoding=”UTF-8″ />
复制代码

注意,最后一个URIEncoding=”UTF-8″在原来的配置中是没有的,只要加上这个配置参数,tomcat就能正确识别UTF-8编码的字符了。

    以上就是我在tomcat上做web应用时所遇到的中文乱码的各种情况,注意文中提到的支持中文编码的字符集时只是以UTF-8为例,其它比较常用的支持 中文编码的字符集还有GBK,gb2312等。你可以根据自己的需要选择合适的字符集。但一定要记住,不管你选择使用什么字符集,一旦选定之后,整个应用 都应尽量使用统一的字符编码格式,尽管某些字符集之间是相互兼容的,但也可能产生不必要的麻烦或者未知的问题。在实际应用中我相信大家也都会遇到各种千奇 百怪的乱码问题,欢迎大家继续补充解决之道,多多益善。





解决基于tomcat的web应用乱码问题 - J2EE开发者 - web思想社区 关注互联网平台级架构设计,UNIX/LINUX系统管理,项目管理,个人职业规划及RIA,CSS/JS/XML,ASP, 解决基于tomcat的web应用乱码问题 - J2EE开发者 - web思想社区 关注互联网平台级架构设计,UNIX/LINUX系统管理,项目管理,个人职业规划及RIA,CSS/JS/XML,ASP,PHP,.NET,JSP,数据库性能提升 - Powered by Discuz! 台球瞄准算法 - 电子书籍/知识库 - web思想社区 关注互联网平台级架构设计,UNIX... 台球瞄准算法 - 电子书籍/知识库 - web思想社区 关注互联网平台级架构设计,UNIX... 台球瞄准算法 - 电子书籍/知识库 - web思想社区 关注互联网平台级架构设计,UNIX... mvc实例:酒店项目OO设计 - .NET/ASP开发者 - web思想社区 关注互联网平... Web常用UI库 kissy - 前端开发者 - web思想社区 分享知识是快乐的-RIA... 基于REST架构的Web Service设计 应用 Rational 工具简化基于 J2EE 的项目第 5 部分 :架构与设计 构建基于ipchains的Linux防火墙---web开发者手册 Linux环境下基于策略的路由---web开发者手册 解决web服务器各种应用的乱码问题,欢迎补充和讨论 解决web服务器各种应用的乱码问题,欢迎补充和讨论 tomcat web.xml配置 基于WEB的J2EE报表解决方案集锦 基于AJAX的WEB设计 基于Web的工作流管理系统的设计与实现 tomcat的web.xml设置问题:Action*.do的含义 web.xml的filter执行顺序导致的乱码,切记! 用web.xml控制Web应用的行为 Linux网络的多播IP技术---web开发者手册 基于Web Service的系统集成技术在网络教育平台中的应用 基于Java的Web应用开发规范 Linux高级应用web