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乱码原因--基本的编码问题的更多相关文章

  1. Java Web乱码原因与解决

    Java Web乱码原因与解决 一.了解编码常识: 1.ASCII 码 众所周知,这是最简单的编码.它总共可以表示128个字符,0~31是控制字符如换行.回车.删 除等,32~126是打印字符,可以通 ...

  2. Tomcat乱码或异常

    一.控制台乱码 原因:Tomcat与Windows编码不一致导致 解决办法:首先找到conf/logging.properties文件,然后打开后找到“java.util.logging.Consol ...

  3. Linux环境下shell和vim中乱码原因及消除办法

    shell和vim中乱码原因及消除办法 作者:Jack47 在Linux下开发,经常遇到乱码问题:shell或者vim中显示不了中文,或者能够显示,但不能输入中文.每次都是上网去搜,或者同事告诉我一些 ...

  4. 获取String类型汉字乱码,如何进行编码

    本文为博主原创,未经允许不得转载: 在解析properties文件中的汉字时,在java代码中解析得到的是一个乱码字符,形如图下: 导致乱码原因:由于在jdk中,默认为gbk编码方式进行编码盒接收的, ...

  5. 【乱码】Request QueryString 编码,传值乱码的几种情况和解决办法(单页,多页)

    自己的项目还好,合作接口神马的传值乱码是很常见的. 遇到了几次这种恶心情况,积累了一点经验,有不对的地方欢迎指正. 乱码原因: 一般来说,常用的编码不是utf-8就是gb2312,一样的 HttpUt ...

  6. html乱码原因与网页乱码解决方法

    造成html网页乱码原因主要是html源代码内中文字内容与html编码不同造成.但无论是哪种情况造成乱码在网页开始时候都需要设置网页编码. charset编码设置 html网页乱码效果截图 一.乱码造 ...

  7. Tomcat乱码问题

    问题:淇℃伅 [main] org.apache.catalina.startup.VersionLoggerListener.log Server容器启动乱码--tomcat 解决:修改.tomca ...

  8. idea中tomcat乱码

    idea中tomcat乱码 解决方案: a. file - settings - 搜File Encodings,改为utf-8 b.打开idea工作目录bin,在idea64.exe.vmoptio ...

  9. 网页为什么会乱码?浅析字符集编码ASCII和Unicode

    因为编码不对! 什么是编码?编码不对为什么会乱码? ……?? 编码转换为什么会丢失数据? ……?? 不管是数据库还是网页,都可能碰到过乱码问题 在计算机世界里,所有数据都使用二进制存储,即只有1和0, ...

随机推荐

  1. 测试环境搭建心得 vs2008+SQL2008 PHP+APACHE+mysql Team Foundation Server2013

    大四即将结束,大学的最后一个假期,找到一份实习工作,担任测试工程师.在过年前的最后一周入职,干了一周的活儿.主要工作就是搭建测试环境. VMware 主要熟悉VMware软件,装系统基本都没什么问题. ...

  2. [No000086]C#foreach集合被改变,报错处理方案

    using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; ...

  3. 从梯度下降到Fista

    前言: FISTA(A fast iterative shrinkage-thresholding algorithm)是一种快速的迭代阈值收缩算法(ISTA).FISTA和ISTA都是基于梯度下降的 ...

  4. 老生长谈:css实现右侧固定宽度,左侧宽度自适应

    反过来也可以:左侧宽度固定,右侧自适应.不管是左是右,反正就是一边宽度固定,一边宽度自适应. 这种布局比较常见,博客园很多默认主题就是这种.一般情况下,这种布局中宽度固定的区域是侧边栏,而自适应的区域 ...

  5. 简单CSS3实现炫酷读者墙

    如题,给大家介绍和讲解几个常用的CSS3属性,并用到实处. 先看demo(请使用Chrome或者Firefox浏览,IE的靠边): 点此查看实例 觉得爽的可以继续阅读下面的知识点,感觉不爽的可绕行. ...

  6. 你真的理解Java的按引用传递吗?

    首先我们来看下面这段代码: public class Test1 { String a = "123"; public static void change(Test1 test) ...

  7. Android Gradle 完整指南(转)

    本文转载来自:http://www.jianshu.com/p/9df3c3b6067a 为什么需要学Gradle? Gradle 是 Android 现在主流的编译工具,虽然在Gradle 出现之前 ...

  8. 安装MySQL的时候遇到的错误

    这里我安装的是MySQL5.6 我遇到的错误有 (1)Warning: Bison executable not found in PATH 解决办法: yum install bison 原文摘自: ...

  9. 【51Nod 1674】【算法马拉松 19A】区间的价值 V2

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1674 对区间分治,统计\([l,r]\)中经过mid的区间的答案. 我的 ...

  10. Hibernate连接数据库超时设置autoReconnect=true

    如果连接闲置8小时 (8小时内没有进行数据库操作), mysql就会自动断开连接, 要重启tomcat. 不用hibernate的话, connection url加参数: autoReconnect ...