get post pageEncoding charset

<%@ page language="java" import="java.util.*" pageEncoding="GBK"  contentType="text/html; charset=GB2312"%>
    pageEncoding :设置.jsp文件保存时的编码,
    charset:设置页面显示时的编码(浏览器->查看->编码)
    pageEncoding,charset如果不设置默认都是“ISO-8859-1”,设置其中任何一个 另一个和它相同
    正常应该都设置成一样,如果设置成不一样,以各自自己的为标准。
    例如:
      1如果pageEncoding设置成“ISO-8859-1”  你在jsp页面上定义一个中文字符,那么eclipse是不能保存成功的,ISO-8859-1不支持中文。
      2request.getParameter 得到一个GBK的中文字符,现在out.print 到页面上 ,如果设置charset=GBK 是没有问题的 但是如果设置成ISO-8859-1 就会乱码。
一个http请求的url地址中如果含有非ASCⅡ码的符号,浏览器就会对其进行URL转码操作。
      两个java类可以实现java.net包下:
          URLEncoder.encode(“字符”, "GBK");//编码
          URLDecoder.decode(“%1A%4B”, "UTF-8"); //解码
         而浏览器会已charset指定的编码进行编码然后发送给服务器(response.setCharacterEncoding(""),优先charset)
get请求:
        http://localhost/test.jsp?a=中国壆
       1.“中国壆”会按照charset设置的方式进行url转码(除非页面上设置response.setCharacterEncoding("")  response.setCharacterEncoding的作用其实和charset一样,但是他的优先级高于charset)
       2.tomcat服务器为例,会对url进行解码默认以ISO-8859-1进行解码。
              可以自己设置tomcat的解码方式   URIEncoding="UTF-8"
              <Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8"/>
           request.getParameter得到的参数就是经过tomcat解码后的数据(如果传递前采用一种编码,tomcat解码采用另外一种就会出现乱码)
           当然通过request得到的乱码 有些可以通过new String("".getByte(),"")转化过来,但有些转化是不可逆的。所以要避免前后不一致的情况。
post请求:
    1 对于post请求body体中带的参数同样是采用charset的编码方式进行编码传递到后台(同样response.setCharacterEncoding的作用优先于charset)。
    2 post方式的解码不是通过tomcat配置的 而是通过request.setCharacterEncoding("")来确定的,如果不指定默认用ISO-8859-1进行转化。如果要用post方式传递中文,而不指定                              request.setCharacterEncoding("") 那么request得到的一定是乱码(不知道还有没有其他方式设置);

综上:
解决乱码的简单方法就是页面上pageEncoding,charset,以及tomcat的URLEncoding都用同一种编码。最好是UTF-8。
同时定义一个filter拦截request请求。在filter中设置request.setCharacterEncoding response.setCharacterEncoding都一样就OK了

注:以上仅是个人经验总结 如有错误望指正。

你可能感兴趣的:(eclipse,tomcat,jsp,.net,浏览器)