最基本的乱码问题
这个乱码问题是最简单的乱码问题一般新会出现就是页面编码不一致导致的乱码
Html代码
<%@ page language=java pageEncoding=UTF%>
<%@ page contentType=text/html;charset=iso%>
<html>
<head>
<title>中文问题</title>
<meta httpequiv=ContentType content=text/html; charset=UTF>
</head>
</head>
<body>
我是个好人
</body>
</html>
三个地方的编码
第一个地方的编码格式为jsp文件的存储格式Ecljpse会根据这个编码格式保存文件并编译jsp文件包括里面的汉字
第二处编码为解码格式因为存为UTF的文件被解码为iso这样如有中文肯定出乱码也就是必须一致而第二处所在的这一行可以没有缺省也是使用iso的编码格式所以如果没有这一行的话我是个好人也会出现乱码必须一致才可以
第三处编码为控制浏览器的解码方式如果前面的解码都一致并且无误的话这个编码格式没有关系有的网页出现乱码就是因为浏览器不能确定使用哪种编码格式因为页面有时候会嵌入页面导致浏览器混淆了编码格式出现了乱码
表单使用Post方式提交后接收到的乱码问题
这个问题也是一个常见的问题这个乱码也是tomcat的内部编码格式iso在捣乱也就是说post提交时如果没有设置提交的编码格式则会以iso方式进行提交接受的jsp却以utf的方式接受导致乱码既然这样的原因下面有几种解决方式并比较
a 接受参数时进行编码转换
String str = new String(requestgetParameter(something)getBytes(ISO)utf)
这样的话每一个参数都必须这样进行转码很麻烦但确实可以拿到汉字
b 在请求页面上开始处执行请求的编码代码
requestsetCharacterEncoding(UTF)
把提交内容的字符集设为UTF-这样的话接受此参数的页面就不必在转码了直接使用
String str = requestgetParameter(something)
即可得到汉字参数但每页都需要执行这句话这个方法也就对post提交的有效果对于get提交和上传文件时的enctype=multipart/formdata是无效的稍后下面单独对这个两个的乱码情况再进行说明
c 为了避免每页都要写requestsetCharacterEncoding(UTF)建议使用过滤器对所有jsp进行编码处理这个网上有很多例子请大家自己查阅
表单get提交方式的乱码处理方式
如果使用get方式提交中文接受参数的页面也会出现乱码这个乱码的原因也是tomcat的内部编码格式iso导致Tomcat会以get的缺省编码方式iso对汉字进行编码编码后追加到url导致接受页面得到的参数为乱码/
解决办法
a 使用上例中的第一种方式对接受到的字符进行解码再转码
b Get走的是url提交而在进入url之前已经进行了iso的编码处理要想影响这个编码则需要在serverxml的Connector节点增加useBodyEncodingForURI=true属性配置即可控制tomcat对get方式的汉字编码方式上面这个属性控制get提交也是用requestsetCharacterEncoding(UTF)所设置的编码格式进行编码所以自动编码为utf接受页面正常接受就可以了但我认为真正的编码过程是tomcat又要根据
<Connector port=
maxThreads= minSpareThreads= maxSpareThreads=
enableLookups=false redirectPort= acceptCount=
debug= connectionTimeout= useBodyEncodingForURI=true
disableUploadTimeout=true URIEncoding=UTF/>
里面所设置的URIEncoding=UTF再进行一次编码但是由于已经编码为utf再编码也不会有变化了如果是从url获取编码接受页面则是根据URIEncoding=UTF来进行解码的