`
youanyyou
  • 浏览: 191884 次
  • 性别: 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 提供的广告

分享到:
评论
40 楼 newvirus 2010-10-12  
写个辅助过滤器就OK了
39 楼 andyneo 2010-10-11  
开始以为真的是终极解决办法,但是看来后来的点评才发现.....不过也很感谢lz提供了一种解决问题的办法 
38 楼 jkls 2010-10-09  
joknm 写道
skzr.org 写道
xiangkun 写道
greatghoul 写道
想法倒是很好,可是如果你拿到一个已经没有统一采用编码的工程,你怎么办,一个个改?

+1


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

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

老实说只要页面和uriEncoding一致,就完全OK了,good luck



这位仁兄太牛了。

在我痛苦的记忆中是这样子的:
程序是十几二十个人搞过文件更新修改,不同的人有不同的servlet,不同的servlet有不同的编码,servlet又对应有不同的html,这些文件不能用数十计算,只能用数百计算,仁兄,你杯具了吧。
可能全改编码还不是杯具的,更杯具的是你修改不同的servlet的时候要切换不同的编码,稍有懈怠,杯具就出来了,一半正常一半乱码。

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

+1


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

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

老实说只要页面和uriEncoding一致,就完全OK了,good luck



这位仁兄太牛了。

在我痛苦的记忆中是这样子的:
程序是十几二十个人搞过文件更新修改,不同的人有不同的servlet,不同的servlet有不同的编码,servlet又对应有不同的html,这些文件不能用数十计算,只能用数百计算,仁兄,你杯具了吧。
可能全改编码还不是杯具的,更杯具的是你修改不同的servlet的时候要切换不同的编码,稍有懈怠,杯具就出来了,一半正常一半乱码。
36 楼 gwpking8419 2010-10-08  
这也叫终极?如果是其它的web容器,你改呀
35 楼 给太阳洒水 2010-10-07  
一个杯具引发了另一场杯具,UTF-8都不允许中文了!!!!!
楼主的这篇文章起到了负面效果,让新人一看,按照你的方法做了,是,问题是解决了,那以后遇到不允许你修改情况的咋办呢。就算让你改,一般的项目,几百个JSP页面少不了吧,就专门来改JSP页面,岂不是要花费几个人日的工作了。
34 楼 faming521 2010-10-07  
beeke 写道
遇见过的一个最复杂的乱码问题:

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

一个字符集问题跨越了三个系统和三家公司,彻底杯具了


有点复杂!!
33 楼 jordan_micle 2010-10-07  
开发中文的东东,编码永远是个纠结的主
32 楼 zhoyan 2010-10-07  
qiren83 写道
相忘江湖 写道
这个问题挺复杂的,utf-8网页中不允许有中文的吧

强人

严重同意
31 楼 xzuse 2010-10-07  
gundumw100 写道
如果能全部都是UTF-8的话,还要这篇文章干嘛?

就是
30 楼 不复记忆 2010-10-06  
哎哟,我的NB死活都有乱码,无语了都...
29 楼 笑我痴狂 2010-10-06  
kidd3166 写道
qiren83 写道
相忘江湖 写道
这个问题挺复杂的,utf-8网页中不允许有中文的吧

强人

+1


+1
28 楼 terryang 2010-10-06  
标题党。擦。
27 楼 sjavaboy 2010-10-05  
现在刚接手一个老的项目, 原来是gbk的, 我要改成UTF8的, 我在eclipse里面用替换的功能把jsp和html的指定的编码直接替换成utf-8了,没有问题, js文件直接改eclipse里面的编码就可以了, css文件要加一个@charset utf8, 和java文件我都是写程序来转编码的, 其中发现一个文件可能有多个编码, 我用了火狐的一个插件可以检查文件的编码信息, 把多种的编码自动手转了, 也不多。 改完了,项目运行没有乱码。
26 楼 坏孩子 2010-10-05  
编码问题纯粹是tomcat自己没弄好,urlencoding以后的都是utf8编码,没有encoding的如果项目的gbk的那就是gbk了,这样还不好处理?判断url是不是编码了最简单的方法用java的URLDecoder反编码一下比较一下长度就可以了,没关注过效率,不过我用这个方法改过tomcat,试了公司很多项目,没有发现问题
25 楼 wtj6891 2010-10-05  
<div class="quote_title">kidd3166 写道</div>
<div class="quote_div">
<div class="quote_title">qiren83 写道</div>
<div class="quote_div">
<div class="quote_title">相忘江湖 写道</div>
<div class="quote_div">这个问题挺复杂的,utf-8网页中不允许有中文的吧</div>
<br>强人 <br>
</div>
<br>+1</div>
<p> </p>
<p> 那是相当的强!</p>
24 楼 chrislee1982 2010-10-04  
selvenfx2009 写道
xiangkun 写道
greatghoul 写道
想法倒是很好,可是如果你拿到一个已经没有统一采用编码的工程,你怎么办,一个个改?

+1

+1

搞个filter不就可以了吗?!!
23 楼 chrislee1982 2010-10-04  
ecokozhangtao 写道
qiren83 写道
相忘江湖 写道
这个问题挺复杂的,utf-8网页中不允许有中文的吧

强人

+1

真的不是一般的强!
22 楼 bepatient 2010-10-03  
这个办法不就是网上流传得最多的吗?很多特殊情况,很多乱码还是无法解决。例如,form中用post提交的时候,你的那个过滤器应该是不起作用的。还要重新编码!
21 楼 ecokozhangtao 2010-10-02  
qiren83 写道
相忘江湖 写道
这个问题挺复杂的,utf-8网页中不允许有中文的吧

强人

+1

相关推荐

Global site tag (gtag.js) - Google Analytics