Tomcat的中文乱码的经典解决方案

本文详细解析了在Tomcat服务器中出现中文乱码的原因及处理方法,尤其关注GET和POST请求的不同处理方式,并提供了一种可行的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

主要现象:

在应用中采用GET方式或POST方式时会出现中文乱码现象,而且针对这两种方式不能使用唯一的解决方案。一般您可能会使用以下的几种方案:

A.request.setCharacterEncoding("gb2312");

B.type = new String(type.getBytes("ISO8859-1"), "GB2312");

C.在Tomcat的配置文件Server.xml中的Connector标签中加入“URIEncoding=UTF-8”属性;

D.conf/web.xml 指定多个Encoding参数;

E.编写一个filter,处理Post提交的编码问题;

但有时候您可能会发现,这样做会让问题更糟糕。

问题分析:

要解决中文乱码的问题,首先要了解Tomcat在背后的处理机制,在查阅了许多资料以及许多前辈们写的文章并做了无数次试验之后,我找到了导致Tomcat中出现中文乱码的主要原因,即Tomcat对GET和POST两种方式的处理方法:在Tomcat 4.x时,采用的是GET和POST两种方式使用相同的字符集,也就是UTF-8。但在Tomcat 5.x下,GET和POST方式采用了不同的字符集

解决方案:

首先我想申明,我所给出的只是解决方案的一种,并不代表我给出的方案能解决大家所遇到的所有问题,但是有一点是肯定的,大家在同一个系统中必须使用相同的解决方案,如果可以最好统一您应用中各个组件包括数据库、JDK、WEB服务器等等的字符编码方案。

而我所采用的是下面的这种方案(只针对Tomcat):

Tomcat 4.x

1.页面编码采用“charset=gb2312”;

2.接收参数使用“request.setCharacterEncoding("gb2312");”;

3.如果需要在转换编码,如“type = new String(type.getBytes("ISO8859-1"), "GB2312");”;

Tomcat 5.x

1.在配置文件Server.xml的Connector标签中加入“useBodyEncodingForURI="true"”,这个属性主要是让Tomcat 5.x在GET和POST方式使用相同的字符集。如果这样做仍不能解决问题,您可以尝试再加入另一个属性“URIEncoding=UTF-8”;

2.其他处理同Tomcat 4.x

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值