Tomcat中文编码-转

本来以为把jsp页面设置为UTF-8,服务器端用filter把request和response设置为utf-8,中文问题应该就差不多了。

但tomcat似乎中间给我我们加了步骤。

1 页面

页面中设置的编码,我们post的数据就会按照页面的编码进行 encode,

比如 我们要post数据为 site=博客园,如果我们的页面为utf-8格式,

则实际post的数据为 site=%E5%8D%9A%E5%AE%A2%E5%9B%AD

java:URLEncoder.encode("博客园", "utf-8"),

所以我们post给服务器的数据会先经过页面编码的encode。

2 tomcat服务器

当我们直接 request.getParameter(“site”);发现得到的字符串为“?????????”,

因为tomcat自作聪明的把的字符串当成iso8859-1来解码了,

tomcat执行了类似:URLDecoder.decode(str, "iso8859-1");,因为jsp页面默认的编码就是iso8859-1,

就算你改了myeclipse的jsp页面默认编码,但tomcat的还是iso8859-1。

3 servlet

我们的servlet如何得到中文编码呢?我们一步一步的加码解码即可:

URLEncoder.encode(str, "iso8859-1");//把tomcat给我们解码的字符串给加码上

URLDecoder.decode(str, "utf-8");//把浏览器给我们加码的数据解码

总体过程:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

//页面 pageEncoding=utf-8

String str = "博客园";

str = URLEncoder.encode(str, "utf-8");

System.out.println(str);

//output:%E5%8D%9A%E5%AE%A2%E5%9B%AD

//tomcat

str = URLDecoder.decode(str, "iso8859-1");

System.out.println(str);

//output:?????????

// servlet

str = URLEncoder.encode(str, "iso8859-1");

System.out.println(str);//%E5%8D%9A%E5%AE%A2%E5%9B%AD

str = URLDecoder.decode(str, "utf-8");

System.out.println(str);//博客园

知道了tomcat加码解码过程,我们就可以彻底设置解码方式了。

如果是get方式传数据,可以设置解码方式,

在tomcat的server.xml中 connector加上解码方式:


1

2

3

<Connector port="8000" protocol="HTTP/1.1" URIEncoding="UTF-8"

           connectionTimeout="20000"

           redirectPort="8443" />

时间: 2024-10-13 00:58:45

Tomcat中文编码-转的相关文章

tomcat中文编码设置

<Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" <!-- queryString的编码规则 --> useBodyEncodingForURI="true" <!-- uri采用utf-8编码,默认采用iso-8859-1默认编码,注意uri不包括queryS

tomcat URL中文编码配置

tomcat的server.xml配置文件中增加 URIEncoding="UTF-8" 如图:

tomcat服务器配置字符集为utf-8-彻底解决中文乱码问题

<Connector port="8070" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8943" useBodyEncodingForURI="true" URIEncoding="UTF-8" /> 我们在程序编写的过程中总是会遇到一些中文编码的问题,需要在程序中很多环节中去进行过滤和转义,依旧

深入分析 Java 中的中文编码问题 (文章来自网络)

许令波,developerWorks 中国网站最佳作者,现就职于淘宝网,是一名 Java 开发工程师.对大型互联网架构设计颇感兴趣,喜欢钻研开源框架的设计原理.有时间将学到的知识整理成文章,也喜欢记录下工作和生活中的一些思考.个人网站是:http://xulingbo.net. 为什么要编码 不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言.由于人类的语言有太多,因而表示这些语言

网上图书商城项目学习笔记-037工具类之BaseServlet及统一中文编码

1.统一中文编码分析 tomcat默认esetISO-8859-1编码,在servlet中,可能通过request的setCharacterEncoding(charset)和response.setContentType("text/html;charset=UTF-8");处理post请求编码,但get请求的编码控制不了,所以,如果请求类型是get,则用装饰者模式把request整个调包 2.EncodingFilter.java 1 package cn.itcast.filte

中文编码问题

编码的原因可以总结为: 计算机中存储信息的最小单元是一个字节即 8 个 bit,所以能表示的字符范围是 0~255 个 人类要表示的符号太多,无法用一个字节来完全表示 要解决这个矛盾必须需要一个新的数据结构 char,从 char 到 byte 必须编码 编码格式一览 各种语言需要交流,经过翻译是必要的,那又如何来翻译呢?计算中提拱了多种翻译方式,常见的有 ASCII.ISO-8859-1.GB2312.GBK.UTF-8.UTF-16 等.它们都可以被看作为字典,它们规定了转化的规则,按照这个

深入分析 Java 中的中文编码问题(1)

几种常见的编码格式 为什么要编码 不知道大家有没有想过一个问题,那就是为什么要编码?我们能不能不编码?要回答这个问题必须要回到计算机是如何表示我们人类能够理解的符号的,这些符号也就是我们人类使用的语言.由于人类的语言有太多,因而表示这些语言的符号太多,无法用计算机中一个基本的存储单元—— byte 来表示,因而必须要经过拆分或一些翻译工作,才能让计算机能理解.我们可以把计算机能够理解的语言假定为英语,其它语言要能够在计算机中使用必须经过一次翻译,把它翻译成英语.这个翻译的过程就是编码.所以可以想

[转]深入分析 Java 中的中文编码问题

收益匪浅,所以转发至此 原文链接: http://www.ibm.com/developerworks/cn/java/j-lo-chinesecoding/ 深入分析 Java 中的中文编码问题 编码问题一直困扰着开发人员,尤其在 Java 中更加明显,因为 Java 是跨平台语言,不同平台之间编码之间的切换较多.本文将向你详细介绍 Java 中编码问题出现的根本原因,你将了解到:Java 中经常遇到的几种编码格式的区别:Java 中经常需要编码的场景:出现中文问题的原因分析:在开发 Java

《深入分析JavaWeb技术内幕》读书笔记——中文编码

为什么要编码 在计算机中存储信息的最小单元是1个字节(8bit),所以能表示的字符范围是0-255个.人类要表达的字符太多,无法用1个字节完全表示.要解决这个问题需要使用新的数据结构char,从char到byte必须编码. 编码格式 ASCII码:共128个,用一个字节的低7位表示,0-31控制字符,32-126打印字符. ISO-8859-1:拓展自ASCII码,覆盖大多数西欧语言字符,单字节编码,共能表示256个字节. GB2312:双字节编码,包含6763个汉字. GBK:拓展自GB231