pageEncoding与charset的区别及servlet相关中文乱码解决方案
来源:互联网 发布:火炮兰灵族捏脸数据 编辑:程序博客网 时间:2024/03/29 13:13
pageEncoding:是jsp文件本身的编码
contentType的charset:是指服务器发送给客户端时的内容编码
在JSP标准的语法中,如果 pageEncoding属性存在,那么JSP页面的字符编码方式就由pageEncoding决定,否则就由contentType属性中的 charset决定,如果charset也不存在,JSP页面的字符编码方式就采用默认的ISO-8859-1
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源码。
第三阶:段java的.class文件执行的过程中向用户端发送html页面的过程中,html的编码格式为charset指定的格式。
contentType的charset是指服务器发送给客户端时的内容编码,contentType里的charset=utf-8是指示页面的输出方式为utf-8
举个例子:
<%@ page contentType="text/html;charset=utf-8" %>
大都会打印出乱码,因为我输入的“你好吗”是gbk的,但是服务器 是否正确抓到“你好吗”不得而知。
但是如果更改为
<%@ page contentType="text/html;charset=utf-8" pageEncoding="GBK"%>
这样就服务器 一定会是正确抓到“你好吗”了。
JSP或servlet中中文乱码的解决方案:
1.以POST请求方式:
在获取请求参数之前设置:
request.setCharacterEncoding("utf-8");
设置输出编码:
response.setContentType("text/html;charset=utf-8");
或者在jsp页面中设置<%@ page contentType="text/html;charset=utf-8" %>
2.以GET方式请求的
以GET方式请求的设置setCharacterEncoding是无效的。
我们需要在获取参数后,对每一个参数进行单独转码。
String name =request.getParameter("name");
name=new String(name.getBytes(),"utf-8");
3.在数据库中的乱码:
设置数据库的编码为utf-8(下面以ORACLE数据库为例)
--查看oracle数据库字符集:
select userenv('language') from dual;
查询结果:
SIMPLIFIED CHINESE_CHINA.AL32UTF8
--修改oracle数据库字符集:(在SQL Plus中)
sql> conn / as sysdba;
sql> shutdown immediate;
database closed.
database dismounted.
oracle instance shut down.
sql> startup mount;
oracle instance started.
total system global area
fixed size
variable size
database buffers
redo buffers
database mounted.
sql> alter system enable restricted session;
system altered.
sql> alter system set job_queue_processes=0;
system altered.
sql> alter system set aq_tm_processes=0;
system altered.
sql> alter database open;
database altered.
sql> alter database character set internal_use UTF8
sql> shutdown immediate;
sql> startup;
4.使用过滤器解决中文乱码问题:
过滤器:
<span style="color:#333333;">package com.util;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class SetCharacterEncodingFilter implements Filter {public void init(FilterConfig filterConfig) throws ServletException {}/** * Select and set (if specified) the character encoding to be used to * interpret request parameters for this request. */public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {</span><span style="color:#ff0000;">request.setCharacterEncoding("utf-8");</span><span style="color:#333333;">// 传递控制到下一个过滤器chain.doFilter(request, response);}public void destroy() {}}</span>
在web.xml中配置
<!-- 配置编码方式 --><filter><filter-name>SetCharacterEncodingFilter</filter-name><filter-class>com.util.SetCharacterEncodingFilter</filter-class></filter> <filter-mapping><filter-name>SetCharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
Myeclipse中设置默认编码格式:
jsp本身编码是由编辑器编码格式决定的 ,如果使用的Myeclipse开发则为jsp编辑器默认编码格式(在Myeclipse里面设置jsp的编码方式:window --> Preferences --> MyEclipse --> Files and Editors --> JSP中选择你要设置的Encoding就可以了,一般现在都统一用UTF-8编码了),然后tomcat以pageEncoding编码格式将jsp文件编码为utf-8格式的java源文件(pageEncoding到utf-8),然后JVM将java文件编译为utf-8的class文件(utf-8到utf-8),tomcat再以charset utf-8写到前端(charset ),最后前端显示的编码格式为utf-8 。
- pageEncoding与charset的区别及servlet相关中文乱码解决方案
- JSP/Servlet中pageEncoding和charset区别,中文乱码解决方案
- JSP中pageEncoding和charset区别,中文乱码解决方案
- JSP中pageEncoding和charset区别,中文乱码解决方案
- JSP中pageEncoding和charset区别,中文乱码解决方案
- JSP中pageEncoding和charset区别,中文乱码解决方案
- JSP中pageEncoding和charset区别,中文乱码解决方案
- JSP中pageEncoding和charset的区别以及中文乱码解决方案
- 中文乱码问题-pageEncoding与charset区别, response和request的setCharacterEncoding 区别
- 中文乱码问题-pageEncoding与charset区别, response和request的setCharacterEncoding 区别
- contentType,charset和pageEncoding的区别,中文乱码
- jsp charset pageEncoding区别,中文乱码解决
- jsp charset pageEncoding区别,中文乱码解决
- jsp charset pageEncoding区别,中文乱码解决
- jsp charset pageEncoding区别,中文乱码解决
- PageEncoding与charset的区别
- pageEncoding与charset的区别
- pageencoding与charset的区别
- uva 11134——Fabled Rooks
- VMware 网卡VMnet0、VMnet1、VMnet8的区别与配置
- POJ2226 Muddy Fields
- IOS UIFont
- GreenDAO数据库版本升级
- pageEncoding与charset的区别及servlet相关中文乱码解决方案
- C里的重定义问题
- 基数排序
- 《ArcGIS开发权威指南》已经出版等待您的选购
- 怎么样将android studio或者xamarin studio默认界面的标题栏去掉,便于html5打包apk,为了美观
- Android自定义View系列之动态变化的Button
- 开源项目DataBaseManager(二):“需求分析”
- 把session存到memecahe中
- mahout好文章