日期:2014-05-16  浏览次数:20379 次

关于java、jsp、servlet、ajax乱码问题总结

最近不太忙,搞了一下一直另我头疼的乱码问题(如有错误,请指教)。总结如下:

1.POST方法提交的表单数据中有中文字符:

??????和POST提交有关:JSP页面中的contentType中的charset属性、web容器接受参数时的解码、程序中

????? 的解码方式。

????? 发送:表单参数值会通过request body发送给服务器,此时网页会根据contentType中的charset属性

????? 对参数进行编码(如:utf8),然后发送个web容器。

????? web容器接受:web容器采用一定的解码方式接受客户端发送过来的数据,在tomcat中默认时ISO-885

????? 9-1。

????? 程序中解码方式:如果不产生乱码,我们必须将服务器接受的ISO-8859-1的编码还原为浏览器中的编

????? 码。tomact中,我们需要将ISO-8859-1解码为和浏览器发送时一样的编码。

???? 整个过程为:浏览器(如:gbk)-->web容器(如:tomcat,使用ISO-8859-1接受)-->程序中将

???? ISO-8859-1转换为gbk,这样就不会有乱码了。

2.以GET方式提交的表单中含有中文字符:

???? 使用GET方式提交时,表单会作为url的一部分进行提交,浏览器会对url encode,然后发送给服务器

???? 对于中文IE,对于中文浏览器,编码一般为UTF-8或GBK(不太确定)。

???? 和GET提交有关:浏览器URL编码(不知道怎么设置)、web容器接受时解码()、程序中的解码方式,

???? 此外还有两个参数,就时server.XML中的URIEncoding和useBodyEncodingForURI。

??? 发送:参数的编码是根据浏览器来决定的,具体怎么搞还没搞明白。

????web容器接受:默认情况下采用ISO-8859-1接受,但是可以通过URIEncoding和useBodyEncodingForURI更改,useBodyEncodingForURI如果为true,表示将采用charset设置编码参数,如

?? 不设置,默认为fasle。URIEncoding是用来直接设置解码方式,但是好像不起作用(不太明白,高手指教)。

?? 程序中的解码方式:只要是解码成和浏览器的一样就不会出现乱码。

???还有就是关于ajax提交的问题,如果是get提交,方法和表单的get提交一样,但是,如果ajax使用post

?? 提交,使用的编码就不是charset的值了,而是使用utf-8,所以要想在服务器端不乱码,必选也使用utf-8。