日期:2014-05-16 浏览次数:20379 次
最近不太忙,搞了一下一直另我头疼的乱码问题(如有错误,请指教)。总结如下:
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。