Page character encoding指的是JSP文件和Tag文件本身的编码格式。
总结:在判定pageEncoding时,BOM优先权最高,其次是pageEncoding和<page-encoding>,然后是page指令的contentType,最后是ISO-8859-1。
响应的编码根本上是由ServletResponse对象的characterEncoding属性决定的。
page指令的contentType属性就是用来设定ServletResponse的charsetEncoding的。如果contentType的CHARSET没有指定,则分两种情况:
响应的编码只由请求的页面决定,通过include指令包含的页面不算。
总结:在判定响应的编码时,page指令的contentType中的charset优先权最高,其次是BOM,然后是pageEncoding和<page-encoding>,最后是ISO-8859-1。
另外,响应的编码受三个方法的影响,setCharacterEncoding, setContentType和setLocale。setLocale的优先级最低。
contentType属性的TYPE值如果不指定,则默认是text/html。
总结:如果只设置page指令的contentType,容易保证了页面编码和响应编码的统一。
在响应结果中,page指令的contentType影响的是HTTP响应头Content-Type。而<meta>元素中的Content-Type则只是一段文本内容,只有当HTTP响应头中没有Content-Type时浏览器才会检测这段文本。也就意味着在浏览器中HTTP响应头Content-Type的优先级比<meta>元素的Content-Type属性优先级高。
前面只讲了页面编码和响应编码,那么请求数据的编码又是由什么决定的?
不同的浏览器对URL可能使用不同的字符编码,中文版的浏览器一般会使用GBK。为了保持统一,很多网站的做法是把URL里面的中文和特殊字符用JavaScript的URL encode。
经过测试,在现在的浏览器中,GET和POST请求数据的编码只受HTML<meta>元素的Content-Type影响。
GET/POST请求数据的读取:
为什么GET和POST不同的解释:任何请求都需要先经过服务器处理,先由服务器读取URL才知道该传给什么Servlet。POST和GET的URL,都受服务器配置URIEncoding的影响,但是POST在通过URL读取成功之后,它的数据不在URL中,所以设置ServletRequest的characterEncoding才能正确读取。
采用XML语法格式的JSP页面,其页面字符编码和相应字符编码永远都是UTF-8。
原文:http://blog.csdn.net/woxueliuyun/article/details/42393495