从
jsp
到
servlet
统一使用
utf-8
编码
.
全部使用
utf-8
编码能省去很多麻烦,
但一点不足是
utf-8
编码对汉字是使用
3-4
个字节,会加大网络传输量。
第二种方法:
1.jsp
页面使用
GBK
2.
使用
servlet
过滤器设置
request.setCharacterEncoding("GBK");google
一下就能找到很
多怎么使用过滤器转换编码。
以上两种方法能解决大部分的乱码问题,特别是第一种方法,能解决使用
ajax
提交时的中
文乱码问题。如果采用第二种方法,那么在使用
ajax
提交
表单时仍然会有中文乱码。这是
因为
ajax
方式提交时
js
使用的是
utf-8
的编码,过滤器使用
gbk
进行转码就不正确了,应
该使用
utf-8
进行转码。
要解决这个问题,
网上也有很多个版本,
其中一个是我曾经采用的
在客户端使用
encodeURI
,然后再在服务器端进行
URLDecoder.decode
,这种方案在偶
尔处理一下中文是可行的,
但是如果页面有大量数据录入,
那么这种方案是不可行的。
有没
有好的解决方法
呢?在经过新一轮的
之后,还是找到了方法。参考
http://www.javaeye.com /topic/157698?page=1
。原理就是根据
httpheader
中的内容来区
分是
ajax
方式请求还是普通的请求。
在
jquery1.2.6
中,
ajaxSettings
默认设置
contentType
为
"application/x-www-form -urlencoded"
,
在
ajax
方法中设置
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
,我们只要在
servlet
中
根据这两个参数值来判断是不是通过
xmlhttprequest
发起的请求。这里值得
一提的是
jquery
在提交
form
时对参数进行了
encodeURIComponent
调用,参见
param
方法
[javascript]
view plainc
opy
1.
jQuery .each( a,
function
(){
2.
s.push( encodeURIComponent(
this
.name) +
"="
+ encodeURIComponent(
thi
s
.value ) );
3.
});
[java]
view plaincopy