以下说的都是在tomcat中的情况:
JSP要经过两次的“编码”,
第一阶段 jsp->java === pageEncoding(要与与页面所用的编码相同)->utf8,
第二阶段 java->.class === utf8->utf8
第三阶段 .class->html === utf8->contentType request.setCharacterEncoding
1.pageEncoding 可以没有pageEncoding ,有的话必须和jsp的文件保存格式的编码一样,否则中文乱码(如果jsp文件格式为utf-8,pageEncoding为gb2312时会报null错误),[color=red]没有的话由contentType的charset决定[/color]
2 pageEncoding和contentType都不存在时中文肯定是乱码,tomcat默认的方式不支持中文
3. 1和2说的contentType和response.setCharacterEncoding是不一样的,虽然contentType最后是 response.setContentType("text/html; charset=utf-8");和response.setCharacterEncoding的作用是一样的,但response.setCharacterEncoding后执行,所以浏览器的编码为response.setCharacterEncoding的,没设置response.setCharacterEncoding的话,就是contentType,没有contentType的话就是由pageEncoding决定。
4.所以页面的编码方式的优先顺序是:response.setCharacterEncoding >contentType>pageEncoding.
5.页面的编码方式与中文是否乱码没有直接关系。只要jsp转换servlet的过程中正确就能基本确保中文不为乱码(当然浏览器的编码方式必须支持中文)
6. meta设置
指定网页使用的编码,该设置对静态网页尤其有作用。因为静态网页无法采用jsp的设置,而且也无法执行response.setCharacterEncoding()。例如:<META http-equiv="Content-Type" content="text/html; charset=GBK" />
如果同时采用了jsp输出和meta设置两种编码指定方式,则jsp指定的优先。因为jsp指定的直接体现在response中。
[color=red]浏览器的编码方式不会随着meta的设置而改变,默认还是utf-8,所以设置了其他的编码方式还要手动选择浏览器的编码方式中文才会正常[/color]
JSP要经过两次的“编码”,
第一阶段 jsp->java === pageEncoding(要与与页面所用的编码相同)->utf8,
第二阶段 java->.class === utf8->utf8
第三阶段 .class->html === utf8->contentType request.setCharacterEncoding
1.pageEncoding 可以没有pageEncoding ,有的话必须和jsp的文件保存格式的编码一样,否则中文乱码(如果jsp文件格式为utf-8,pageEncoding为gb2312时会报null错误),[color=red]没有的话由contentType的charset决定[/color]
2 pageEncoding和contentType都不存在时中文肯定是乱码,tomcat默认的方式不支持中文
3. 1和2说的contentType和response.setCharacterEncoding是不一样的,虽然contentType最后是 response.setContentType("text/html; charset=utf-8");和response.setCharacterEncoding的作用是一样的,但response.setCharacterEncoding后执行,所以浏览器的编码为response.setCharacterEncoding的,没设置response.setCharacterEncoding的话,就是contentType,没有contentType的话就是由pageEncoding决定。
4.所以页面的编码方式的优先顺序是:response.setCharacterEncoding >contentType>pageEncoding.
5.页面的编码方式与中文是否乱码没有直接关系。只要jsp转换servlet的过程中正确就能基本确保中文不为乱码(当然浏览器的编码方式必须支持中文)
6. meta设置
指定网页使用的编码,该设置对静态网页尤其有作用。因为静态网页无法采用jsp的设置,而且也无法执行response.setCharacterEncoding()。例如:<META http-equiv="Content-Type" content="text/html; charset=GBK" />
如果同时采用了jsp输出和meta设置两种编码指定方式,则jsp指定的优先。因为jsp指定的直接体现在response中。
[color=red]浏览器的编码方式不会随着meta的设置而改变,默认还是utf-8,所以设置了其他的编码方式还要手动选择浏览器的编码方式中文才会正常[/color]