解决页面中文乱码问题解析
jsp文件响应到的过程
乱码通常会在引擎预处理阶段和html文件响应到浏览器阶段发生。
jsp引擎预处理分为两个步骤:
检查jsp文件<%@ page language="java" contenttype="text/html; charset=utf-8" pageencoding="utf-8"%>指令对文件进行解码,解码字符集优先级:pageencoding > contenttype > default 将.jsp文件解析成utf-8格式的.java文件html文件响应到浏览器
html文档是作为带有字符编码信息的字节流序列在互联网中传送的。字符编码信息可以在随文档发送的http响应头信息中指定(通过web服务器的配置来指定编码参数,为所有text/html类型的文档指定带有正确编码信息的content-type头信息。例如content-type: text/html;charset=utf-8),也可以在文档的 html标签中指定(在html代码中包含http-equiv="content-type"的meta标签)。如果不知道如何构造一个页面的字符,浏览器自然也不能正确地渲染页面。绝大部分浏览器在开始执行任何javascript代码或者绘制页面之前都要缓冲一定数量的字节流(通常为1024字节),缓冲的同时它们也要查找相关的字符编码设定。不同浏览器需要缓冲的字节流数量不同,在缓冲的字节流内如果找不到编码设定,浏览器会以默认的编码对页面开始渲染。如果在开始渲染页面之后才发现指定的编码设定与其默认值不同,都会导致重新解析文档并重绘页面。如果html文件引入了外部资源(例如css\js\media),浏览器会重新对资源进行请求。浏览器对编码参数选择的优先级:contenttype > pageencoding
>meta > default。contenttype和pageencoding会改变http响应头信息。
各个浏览器默认编码:
ie6、ie7、ie8、firefox 默认字符编码:gb2312;
chrome、safari 默认字符编码:iso-8859-1;
opera默认编码:gbk
3.通过url向服务器传递参数时没有方法可以设置它的编码,服务器默认使用iso-8859-1的格式编码,可以通过在tomcat的server.xml中,设置
string name =request.getparameter(“name”);
name = newstring(name.getbytes(“iso-8859-1”), “utf-8”);
进行转码。