tomcat乱码原因--基本的编码问题
tomcat乱码原因:在学习servlet时候,经常会遇到中文乱码的问题,网上查只知道如何设置不乱码,其中的原理不是很明白。我认为明白其中的原理,乱码问题就很容易解决
tomcat乱码解决方法:
post请求:
request.setCharacterEncoding("utf-8");
如果不想每个请求方法里都写就写一个filter过滤器
get请求:
1.修改tomcat中的server.xml文件
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding='UTF-8' />
2.获得参数是通过new String()方法
String name = request.getParameter("name");
name = new String(name.getBytes("iso-8859-1"),"utf-8");
问题:tomcat对于get请求使用了ISO-8859-1编码,对post请求默认使用你设置的编码,没有设置就使用默认ISO-8859-1编码。
对post请求设置编码就不会乱码,原理是使用utf-8编码,使用utf-8解码,不使用utf-8解码就会出错如下:
String s = new String("你好".getBytes(),"utf-8");
System.out.println(new String(s.getBytes(),"iso-8859-1"));
String s1 = new String(s.getBytes(),"utf-8");
System.out.println(s1);
结果:ä½ å¥½
你好
get请求浏览器的编码为utf-8,然而tomcat使用ISO-8859-1进行解码就会乱码,为什么这样可以解决乱码,
是因为ISO-8859-1编码是单字节编码,所以使用s1.getBytes("iso-8859-1")得到的直接数组和之前没有被解码时一样,
所以在使用utf-8就和上面的post一样,只是编码,解码
并不是所有的乱码都可以使用这种方式,只是因为ISO-8859-1编码是单字节编码,获得其字节数组是没有变的,
因为不同的编码对应的字节数是不一样的
String s = new String("你好".getBytes(),"utf-8");
System.out.println(Arrays.toString(s.getBytes()));
//相当于tomcat帮助解码(实际对于开发者又编码一次,所以后面要先获得iso-8859-1编码的字节数组,再转成utf-8编码)
String s1 = new String(s.getBytes(),"iso-8859-1");
//打印iso-8859-1编码的字节数据,与解码前的字节数组比较,发现一样,所以以utf-8编码解码不会乱码
System.out.println(Arrays.toString(s1.getBytes("iso-8859-1")));
String s2 = new String(s1.getBytes("iso-8859-1"),"utf-8");
System.out.println(s2);
结果:
[-28, -67, -96, -27, -91, -67]
[-28, -67, -96, -27, -91, -67]
你好
tomcat乱码原因--基本的编码问题的更多相关文章
- Java Web乱码原因与解决
Java Web乱码原因与解决 一.了解编码常识: 1.ASCII 码 众所周知,这是最简单的编码.它总共可以表示128个字符,0~31是控制字符如换行.回车.删 除等,32~126是打印字符,可以通 ...
- Tomcat乱码或异常
一.控制台乱码 原因:Tomcat与Windows编码不一致导致 解决办法:首先找到conf/logging.properties文件,然后打开后找到“java.util.logging.Consol ...
- Linux环境下shell和vim中乱码原因及消除办法
shell和vim中乱码原因及消除办法 作者:Jack47 在Linux下开发,经常遇到乱码问题:shell或者vim中显示不了中文,或者能够显示,但不能输入中文.每次都是上网去搜,或者同事告诉我一些 ...
- 获取String类型汉字乱码,如何进行编码
本文为博主原创,未经允许不得转载: 在解析properties文件中的汉字时,在java代码中解析得到的是一个乱码字符,形如图下: 导致乱码原因:由于在jdk中,默认为gbk编码方式进行编码盒接收的, ...
- 【乱码】Request QueryString 编码,传值乱码的几种情况和解决办法(单页,多页)
自己的项目还好,合作接口神马的传值乱码是很常见的. 遇到了几次这种恶心情况,积累了一点经验,有不对的地方欢迎指正. 乱码原因: 一般来说,常用的编码不是utf-8就是gb2312,一样的 HttpUt ...
- html乱码原因与网页乱码解决方法
造成html网页乱码原因主要是html源代码内中文字内容与html编码不同造成.但无论是哪种情况造成乱码在网页开始时候都需要设置网页编码. charset编码设置 html网页乱码效果截图 一.乱码造 ...
- Tomcat乱码问题
问题:淇℃伅 [main] org.apache.catalina.startup.VersionLoggerListener.log Server容器启动乱码--tomcat 解决:修改.tomca ...
- idea中tomcat乱码
idea中tomcat乱码 解决方案: a. file - settings - 搜File Encodings,改为utf-8 b.打开idea工作目录bin,在idea64.exe.vmoptio ...
- 网页为什么会乱码?浅析字符集编码ASCII和Unicode
因为编码不对! 什么是编码?编码不对为什么会乱码? ……?? 编码转换为什么会丢失数据? ……?? 不管是数据库还是网页,都可能碰到过乱码问题 在计算机世界里,所有数据都使用二进制存储,即只有1和0, ...
随机推荐
- Citrix Xen Desktop安装配置
Citrix虚拟化的东西其实和我现在做的东西完全没有关系的.反正接到通知要搭一个Citrix Xen Desktop那就做. 先放几个教程: :跟着图片通过XenDesktop7发布Win8桌面 这个 ...
- 【2016-10-31】【坚持学习】【Day16】【MongoDB】【入门】
下载,安装: http://www.mongodb.org/downloads 命令行下运行 MongoDB 服务器 为了从命令提示符下运行MongoDB服务器,你必须从MongoDB目录的bin目录 ...
- UVA - 10375 Choose and divide[唯一分解定理]
UVA - 10375 Choose and divide Choose and divide Time Limit: 1000MS Memory Limit: 65536K Total Subm ...
- NYOJ 70
描述:给定两个数n,m,其中m是一个素数. 将n(0<=n<=2^31)的阶乘分解质因数,求其中有多少个m. 注:^为求幂符号. 输入: 第一行是一个整数s(0<s<=100) ...
- jmeter(七)定时器
知识来源有点复杂,其他测试工作者的博客,百度百科,搜集的电子文档,个人理解等等,限于水平和理解能力,可能有些内容有错误的地方... jmeter提供了很多元件,帮助我们更好的完成各种场景的性能测试,其 ...
- Maven项目中的pom.xml详解【转】
什么是pom? pom作为项目对象模型.通过xml表示maven项目,使用pom.xml来实现.主要描述了项目:包括配置文件:开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url, ...
- ConvertHelper 通用类
public class ConvertHelper<T> where T : new() { private static Dictionary<Type, List<IPr ...
- manachor
在原字符串每个字符间各插入一个未曾出现的字符,在字符串头插入另一个未出现的字符防止越界,求出的p[i]-1既为以i为中心的最长回文串的长度 void manacher(){ ,id; ;i<=n ...
- SharePoint远程调试CSS
1.在浏览器中找到需要调试的样式文件: 2.在SharePoint打开对应的文件,直接修改看到效果:
- mysql忘记root密码解决办法
最近项目中的数据库我放在了服务器上,但是今天突然不能用了,进入服务器查看,果然是数据库不能进去了,所以今天来分享一个mysql忘记root密码的解决方案: 1.让mysql不载入权限表,命令:mysq ...