同事请求帮忙,说程序好好的,突然就在提交表单的时候乱码了。本着助人为乐的精神,去看了一下。了解了一下状况后开始调试。 发现请求提交到后台的时候中文已经变成了乱码。检查web.xml, 发现有编码转换的Filter, 检查页面,编码是UTF-8,检查request的编码,也是UTF-8,编码都是一致的。就是提交到后台的时候乱码。 试着把取到的乱码进行转码,发现以下的状况能够正常得到中文:java
<!-- lang: java --> new String(name.getBytes("iso-8850-1"), "utf-8")
接近崩溃的边缘了。再查Post到后台的数据,中文也是UTF-8的编码。web
开始百度,有人说在jQuery中设置ajaxSettings的contentType属性,在后面加上";charset=utf-8"ajax
<!-- lang: js --> ajaxSettings: { url: ajaxLocation, isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), global: true, type: "GET", contentType: "application/x-www-form-urlencoded;charset=utf-8", processData: true, async: true, ...... }
试着改了以后,发现果真能够解决问题。app
可是总以为这么解决问题有点怪怪的,jQuery那么多人用,为啥非要指定这个utf-8的编码呢,若是项目用的不是utf-8呢? 回到本身的位子继续研究。项目中用的是Spring的CharacterEncodingFilter, 懒得下源码,因而本身写了个EncodingFilter加在前面,发现request.getCharacterEncoding()返回的是null,因而手动设置了一下编码为utf-8, 再getParameter, 发现是正常的中文。async
此处省去部分文字……ide
在javaEE的文档里,对于setCharacterEncoding的解释是这样的:this
<!-- lang: java --> Overrides the name of the character encoding used in the body of this request. This method must be called prior to reading request parameters or reading input using getReader(). Otherwise, it has no effect.
最后发现是Filter的顺序问题致使。在encodingFilter以前配置了其余的Filter,恰好在那里调用了get方法,调整以后,一切恢复正常。编码