`
youanyyou
  • 浏览: 192305 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

Java Web开发(JSP、Servlet)乱码终极解决方案

阅读更多

      千万不要看网上那些杂七杂八的解决乱码的文章,解决乱码最好的方法是(没有之一):在所有地方统一采用UTF-8编码。

这其中包括:

1 - 工程

如果使用的是Eclipse,那么打开Preference,搜索encoding,把所有能改的地方都改成UTF-8,这就确保了源文件的编码。

如果使用的是NetBeans,不用设置,因为NetBeans默认就是UTF-8。

2 - 数据库

例如MySQL,加上启动参数--character-set-server=utf8,这样以后创建的所有数据库都是UTF-8编码,这样就不需要一个一个数据库改了。注意选择MySQL管理工具的时候要选择支持UTF-8的,不过貌似不支持的很少。

3 - Web服务器

例如Tomcat 6,在<Service name="Catalina">中的<Connector>中加上URIEncoding="utf-8",确保URL的编码格式为UTF-8。

4 - JSP页面

开头要这样写:
<%@ page ... charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta ... charset=UTF-8">

5 - Servlet过滤器

如果项目中使用了Servlet,那么编写一个Servlet过滤器,就能避免在每一个Servlet开头都写那几行同样的语句了:

public class EncodingFilter implements Filter {

public void doFilter (request, response, chain) {
    // 设置编码格式
    request.setCharacterEncoding("utf-8");
    response.setCharacterEncoding("utf-8");
    // 传递到下一个过滤器
    chain.doFilter(request, response);
  }
}

 

深圳人才网 深圳招聘网 深圳人才招聘网 深圳人才大市场 

企业、个人免费注册,获取想要的 深圳 软件工程师招聘信息 月薪最低3000-8000,更有高端猎头职位! 

www.szrcwz.com                                                                                                                                           

                  Google 提供的广告

分享到:
评论
20 楼 beeke 2010-10-02  
遇见过的一个最复杂的乱码问题:

A系统是C写的,定时发送一个消息给MQ
B系统是Java基于weblogic的老系统,两边都不是utf-8编码
两个系统分属于两个公司,谁也不鸟谁
MQ是由第三家公司安装维护的,两边都不鸟

一个字符集问题跨越了三个系统和三家公司,彻底杯具了
19 楼 tianice 2010-10-02  
有些项目是不允许改的,只能在上边做二次开发
18 楼 pop1030123 2010-10-02  
greatghoul 写道
想法倒是很好,可是如果你拿到一个已经没有统一采用编码的工程,你怎么办,一个个改?

哈哈,你也有空上来逛逛了~~~
17 楼 lpn520 2010-10-02  
xiangkun 写道
greatghoul 写道
想法倒是很好,可是如果你拿到一个已经没有统一采用编码的工程,你怎么办,一个个改?

+1

+1
16 楼 littleJava 2010-10-01  
如果已有的部分代码和项目规定的不同,可以写个工具自动转换吧。数据库的也可以使用这种方法吧?……
15 楼 changeItMore 2010-10-01  
<p>这位同学,应该把基本原理弄明白</p>
<p>统一所有格式是你自己配置的,万一设计到新老应用或者数据库等原因就是问题了</p>
<p>所以得了解字符编码的格式以及导致乱码的原因</p>
14 楼 yoyo837 2010-10-01  
这些方法我都会,而且还会更多的呢···呵呵·
13 楼 s-s-h 2010-10-01  
想法不错,有待时间考验
12 楼 黄金勇 2010-10-01  
你可以写一个过滤器(filter) 这样你就可以解决乱码
11 楼 gundumw100 2010-10-01  
如果能全部都是UTF-8的话,还要这篇文章干嘛?
10 楼 pochonlee 2010-10-01  
主要也就两个部分吧:
1.数据库(数据库的链接指定编码方式和内容)
2.页面(包含文件的编码格式和制定给浏览器解释的编码,以及请求数据的时候指定编码)
统一以后应该基本不会有什么乱码了。

经常搞php和java,无非就是这两个方面。
9 楼 kidd3166 2010-10-01  
qiren83 写道
相忘江湖 写道
这个问题挺复杂的,utf-8网页中不允许有中文的吧

强人

+1
8 楼 qiren83 2010-10-01  
相忘江湖 写道
这个问题挺复杂的,utf-8网页中不允许有中文的吧

强人
7 楼 相忘江湖 2010-10-01  
这个问题挺复杂的,utf-8网页中不允许有中文的吧
6 楼 selvenfx2009 2010-09-30  
xiangkun 写道
greatghoul 写道
想法倒是很好,可是如果你拿到一个已经没有统一采用编码的工程,你怎么办,一个个改?

+1

+1
5 楼 skzr.org 2010-09-30  
xiangkun 写道
greatghoul 写道
想法倒是很好,可是如果你拿到一个已经没有统一采用编码的工程,你怎么办,一个个改?

+1


是的,我就是这样修改的,上次一口气修改了三四十个jsp,呵呵,只要坚持,2个星期搞定没有问题

还有一点,如果设置了tomcat的server.xml中的uriEncoding就一切OK

老实说只要页面和uriEncoding一致,就完全OK了,good luck
4 楼 seanxiaoxiao 2010-09-30  
还差一些东西,比如页面的编码,以及编译器在编译的时候显示指定编码,乱码无处不在,很难说有啥终极的解决方案
3 楼 wad12302 2010-09-30  

greatghoul 写道
想法倒是很好,可是如果你拿到一个已经没有统一采用编码的工程,你怎么办,一个个改?

这个想法不行。

应为如果是已经上线了部分功能的系统 你不可能再修改了 这样会印象到其他的功能 而且如果是后进项目,该别人的东西很不现实
2 楼 xiangkun 2010-09-30  
greatghoul 写道
想法倒是很好,可是如果你拿到一个已经没有统一采用编码的工程,你怎么办,一个个改?

+1
1 楼 greatghoul 2010-09-30  
想法倒是很好,可是如果你拿到一个已经没有统一采用编码的工程,你怎么办,一个个改?

相关推荐

Global site tag (gtag.js) - Google Analytics