1,浏览器
html文件编码
<head>头部中<meta charset="字符集">标签告诉浏览器以某种特定的字符编码解释html文件。例如,如果要告诉浏览器使用utf-8字符集,则代码书写如下:<meta charset="utf-8">。浏览器打开html文件时用uft-8编码解析html文件。或者用<meta http-equiv="Content-Type" Content="text/html;charset=uft-8">替换<meta charset="utf-8">也行。
当html文档发送form表单数据给服务器时,服务器会读取HTTP请求的“Content-Type”头信息代码来决定request,response的编码方式.如果客户端请求未定义“Content-Type”头信息,则服务器会采用缺省编码(例如:ISO-8859-1)来构建request和response。所以当出现乱码时,可以用setCharacterEncoding(String enc)方法或者filter设定request和response的编码。
提示:setCharacterEncoding(String enc)必须选择合适的编码方式。最好的办法是html文件,request,response,jsp等源码文件都采用同一种编码,例如uft-8
3,服务器
(1)编写jsp等源码文件时的编码
在编写jsp文件时,在jsp文件的头部会有一个<%@ page language="java" import="java.util.*" pageEncoding="utf-8" contentType="text/html;charset=UTF-8" %>:
pageEncoding是jsp文件本身的编码,也就jsp文件保存在磁盘上的文件编码格式。
contentType的charset是指服务器发送给客户端的内容的编码,例如,服务器发送给浏览器的html文件的编码。
(2)编译源代码为class时JVM用的编码
JSP要经过两次的“编码”,第一阶段会用pageEncoding,第二阶段会用utf-8至utf-8,第三阶段就是由Tomcat出来的网页, 用的是contentType。
第一阶段是jsp编译成.java,它会根据pageEncoding的设定读取jsp,结果是由指定的编码方案翻译成统一的UTF-8 JAVA源码(即.java),如果pageEncoding设定错了,或没有设定,出来的就是中文乱码。
第二阶段是由JAVAC的JAVA源码至java byteCode的编译,不论JSP编写时候用的是什么编码方案,经过这个阶段的结果全部是UTF-8的encoding的java源码。
第三次就是程序运行的结果保存成文件时,输出文件的编码。
4,数据库
html文件编码
<head>头部中<meta charset="字符集">标签告诉浏览器以某种特定的字符编码解释html文件。例如,如果要告诉浏览器使用utf-8字符集,则代码书写如下:<meta charset="utf-8">。浏览器打开html文件时用uft-8编码解析html文件。或者用<meta http-equiv="Content-Type" Content="text/html;charset=uft-8">替换<meta charset="utf-8">也行。
提示: 通过浏览器可以查看网页的编码方式:
当html文档发送form表单数据给服务器时,服务器会读取HTTP请求的“Content-Type”头信息代码来决定request,response的编码方式.如果客户端请求未定义“Content-Type”头信息,则服务器会采用缺省编码(例如:ISO-8859-1)来构建request和response。所以当出现乱码时,可以用setCharacterEncoding(String enc)方法或者filter设定request和response的编码。
提示:setCharacterEncoding(String enc)必须选择合适的编码方式。最好的办法是html文件,request,response,jsp等源码文件都采用同一种编码,例如uft-8
3,服务器
(1)编写jsp等源码文件时的编码
在编写jsp文件时,在jsp文件的头部会有一个<%@ page language="java" import="java.util.*" pageEncoding="utf-8" contentType="text/html;charset=UTF-8" %>:
pageEncoding是jsp文件本身的编码,也就jsp文件保存在磁盘上的文件编码格式。
contentType的charset是指服务器发送给客户端的内容的编码,例如,服务器发送给浏览器的html文件的编码。
(2)编译源代码为class时JVM用的编码
JSP要经过两次的“编码”,第一阶段会用pageEncoding,第二阶段会用utf-8至utf-8,第三阶段就是由Tomcat出来的网页, 用的是contentType。
第一阶段是jsp编译成.java,它会根据pageEncoding的设定读取jsp,结果是由指定的编码方案翻译成统一的UTF-8 JAVA源码(即.java),如果pageEncoding设定错了,或没有设定,出来的就是中文乱码。
第二阶段是由JAVAC的JAVA源码至java byteCode的编译,不论JSP编写时候用的是什么编码方案,经过这个阶段的结果全部是UTF-8的encoding的java源码。
第三次就是程序运行的结果保存成文件时,输出文件的编码。
4,数据库
不同的数据库有不同的乱码问题处理办法,可以搜索相关数据库乱码问题的解决办法。
解决方法:
1.对于同一个应用,最好统一编码,推荐为UTF-8,当然GBK也可以。
2.正确设置JSP的pageEncoding参数
3.在所有的JSP/Servlet中设置contentType="text/html;charset=UTF-8"或response.setCharacterEncoding("UTF-8"),从而间接实现对浏览器编码的设置。
4.对于请求,可以使用过滤器或者在每个JSP/Servlet中设置request.setCharacterEncoding("UTF-8")