解决页面中文乱码问题

中文乱码的原因

  1. 以不合适的编码集解码,如文件保存的格式为UTF-8解码时使用BGK。
  2. 以不支持中文的编码集进行编码,如IOS-8859-1

JSP文件响应到浏览器的过程

解决页面中文乱码问题_第1张图片

乱码通常会在jsp引擎预处理阶段和html文件响应到浏览器阶段发生。

Jsp引擎预处理分为两个步骤:

  1. 检查jsp文件<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>指令对文件进行解码,解码字符集优先级:pageEncoding > contentType > default
  2. 将.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 > defaultcontentTypepageEncoding会改变HTTP响应头信息。

各个浏览器默认编码:

IE6IE7IE8Firefox 默认字符编码:gb2312

ChromeSafari 默认字符编码:ISO-8859-1

Opera默认编码:gbk

 

3.通过URL向服务器传递参数时没有方法可以设置它的编码,服务器默认使用ISO-8859-1的格式编码,可以通过在tomcatserver.xml中,设置.>元素的属性URIEncoding="UTF-8”(默认没有设置此属性),指定URI使用“UTF-8”编码方式。获取URL的中文参数需要使用

String name =request.getParameter(“name”);

name = newString(name.getBytes(“iso-8859-1”), “utf-8”);

进行转码。

 

你可能感兴趣的:(随笔)