tomocat解决乱码问题

使用Tomcat进行JSP开发最头疼的莫过于中文乱码问题了,总结Tomcat乱码问题出现的原因必须明白以下几点:

1.Tomcat一般总是默认使用ISO-8859-1作为字符编码方式的。所以,除非你在Servlet中使用了 request.setCharacterEncoding("编码方式");指定了特殊的编码方式,否则Tomcat默认使用ISO-8859-1的编 码方式。

2.在JSP页面中pageEncoding和charset和含义是不同的。pageEncoding是指页面的编码格式(请记住!,十分重要~,与显 示无关),也就是说无论你JSP里的pageEncoding采用什么方式,如果出现中文乱码,原因不在于pageEncoding的所指定的编码方式不 对,而在于charset的属性不对。charset是负责JSP页面中的字符按什么编码方式显示。pageEncoding只负责页面的编码格式,而后 JAVA虚拟机负责按照pageEncoding指定的编码转换成Unicode编码的字节码文件。(也就是说,无论你pageEncoding指定什么 方式,最终都是转换成了Unicode编码。)另外请大家注意,如果从客户端提交的用户请求里的中文也是使用pageEncoding方式编码的。也就是 说,在Servlet中request.getParameter("参数");Tomcat默认是使用ISO-8859-1方式去读取的,但实际里面的 字符编码方式应该是JSP页面pageEncoding所指定的方式。除非用户自己加上request.setCharacterEncoding("编 码方式");

3.明白pageEncoding和charset之间的关系。一般而言,如果页面里指定了pageEncoding的方式也就是说,比如:<%@ page language="java" import="java.util.*" pageEncoding="GBK" %>这句话,而没有指定charset的话,那么页面默认是按照charset=ISO-8859-1编码方式显示字符,按照 pageEncoding="GBK"方式进行页面的编码。如果你的JSP页面里面没有指定pageEncoding方式,而只是说明了charset的 话,比如:

<%@ page contentType="text/html;charset=utf-8"%> 这句话,那么JSP默认是按照pageEncoding="utf-8"进行页面编码的,字符集按照charset=utf-8"显示。

4.使用request.setCharacterEncoding("编码方式");注 意:request.setCharacterEncoding()仅仅对POST提交方式起作用,对于GET方式提交还是会出现乱码问题。要解决GET 提交中文的乱码问题,可以在Server.xml 的<Connector port="8888" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

加入:URIEncoding="utf-8" useBodyEncodingForURI="true"

另外,request.setCharacterEncoding()这句话一定要放在要读取的第一参数之前调用。否则也不起作用了!!

5、也可以创建一个filter来对编码进行转换,但filter也只对post提交方式起作用,对get无能为力。URIEncoding对post不起作用。

来源:http://hpi-ls.blog.163.com/blog/static/20214748201022295532305/

时间: 2024-11-09 08:48:21

tomocat解决乱码问题的相关文章

抓取网页中的内容、如何解决乱码问题、如何解决登录问题以及对所采集的数据进行处理显示的过程

本文主要介绍如何抓取网页中的内容.如何解决乱码问题.如何解决登录问题以及对所采集的数据进行处理显示的过程.效果如下所示: 1.下载网页并加载至HtmlAgilityPack 这里主要用WebClient类的DownloadString方法和HtmlAgilityPack中HtmlDocument类LoadHtml方法来实现.主要代码如下. var url = page == 1 ? "http://www.cnblogs.com/" : "http://www.cnblogs

servlet 解决乱码问题

对于servlet大家应该都很熟悉了,今天再复习一下,如果有哪里写的不好或不对的地点希望广大的网友批评指正.今天只讨论get和post两w种方式,他们之间有很多的不同点,所以解决编码的方式也会不一样,post的乱码问题好解决一点,下面先简单说下http协议,以便我能更好的记忆原理性的东西和他们之间的不同点. get方式和post方式都是基于http协议的,它的目的是为了提供一种发布和接收html页面的方法,由客户端发起请求,服务器端进行响应. 一个完整的请求消息包括:一个请求行,若干消息头和请求

mac系统下为emacs设置中文字体,解决乱码问题

最近换了个系统,现在用mac系统. 当打开emacs后,中文支持的不是很好.有的地方能显示,在.el文件的注释里显示为口口口口口口口口这样的框,如下图所示 找了半天,是因为中文字体的问题,只要设置好中文字体就行了. 以前在Linux下中文就支持的很好,不用配制中文字体就能显示. 配制代码如下(将其放到.emacs文件或init.el里就OK): ;; -------------------------------------------------------------------------

mysql 使用set names 解决乱码问题的原理

解决乱码的方法,我们经常使用“set names utf8”,那么为什么加上这句代码就可以解决了呢?下面跟着我一起来深入set names utf8的内部执行原理 先说MySQL的字符集问题.Windows下可通过修改my.ini内的 PHP代码 [mysql] default-character-set=utf8    //客户端的默认字符集[mysqld] default-character-set=utf8    //服务器端默认的字符集 假设我们把两个都设为utf8,然后在MySQL C

php 解决乱码的通用方法

一,出现乱码的原因分析 1,保存文件时候,文件有自己的文件编码,就是汉字,或者其他国语言,以什么编码来存储 2,输出的时候,要给内容指定编码,如以网页的形势输入时<meta http-equiv="Content-Type" content="text/html; charset=utf8" /> 3,从数据库取出数据时,搞不清楚数据库,设置的字符集 4,以汉字为例,汉字本来也有编码的,一个汉字gbk要二个字符,而utf8要三个字符 上面说了有可能引起乱

Openfire:解决乱码问题

当部署openfire后,创建用户和发送离线消息时会出现中文字符乱码的问题.要解决这个问题需要同时配置openfire和mysql两端. 首先openfire端,在安装页面中指定odbc连接串中需要带有?useUnicode=true&characterEncoding=UTF8&charset=utf8&characterSetResults=UTF8 然后mysql中需要确定编码变量,可以通过SHOW VARIABLES LIKE  'char%';命令查看.如果charact

170117、spring解决乱码

spring解决乱码这个问题网上有很多解决方法,也可以关注本博客的文章,在此不再赘述, 今天推荐大家另外两种解决方法! 问题现象: 1.后台代码 2.前端界面 解决方法: 方法1:是在后台请求方法上加produces = MediaType.APPLICATION_JSON_VALUE + ";charset=utf-8" 方法2:使用spring的内置类MappingJacksonValue (该方法需要spring4.1以后的版本)

Python字符串的encode与decode研究心得——解决乱码问题

转~Python字符串的encode与decode研究心得——解决乱码问题 为什么Python使用过程中会出现各式各样的乱码问题,明明是中文字符却显示成“/xe4/xb8/xad/xe6/x96/x87”的形式?为什么会报错“UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)”?本文就来研究一下这个问题. 字符串在Python内部的表示是unico

http get/post解决乱码问题

<form method="默认为get"-> <s:form mothod="默认为post"-> ===================================== 表单post方式提交时,解决乱码的方法为(firefox查看) 表单为get提交时,解决乱码的方法为: 1.key=new String (key.getBytes("iso8859-1"),"utf-8"); 2.修改tomc