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. Leetcode: sliding window maximum

    August 7, 2015 周日玩这个算法, 看到Javascript Array模拟Deque, 非常喜欢, 想用C#数组也模拟; 看有什么新的经历. 试了四五种方法, 花时间研究C# Sorte ...

  2. Linux Kernel代码艺术——系统调用宏定义

    我们习惯在SI(Source Insight)中阅读Linux内核,SI会建立符号表数据库,能非常方便地跳转到变量.宏.函数等的定义处.但在处理系统调用的函数时,却会遇到一些麻烦:我们知道系统调用函数 ...

  3. 【读书笔记《Bootstrap 实战》】5.电子商务网站

    构建了公司网站之后,接下来就可以考虑设计一个在线商店了. 此次的设计以上一章的设计为基础, 只是添加了一个包含如下元素的新页面: □ 包含商品小图.标题和说明的产品网格: □ 位于左侧的变懒,用于按类 ...

  4. File类-文件基本操作

    package com.java.io; import java.io.File; import java.io.IOException; import java.math.BigDecimal; i ...

  5. 原生态ajax

    用户名是否被注册过? 创建出注册信息: <h1>注册信息</h1> <input type="text" name="txtName&quo ...

  6. HTML 学习笔记 JavaScript(数组)

    1.数组的创建 var arrayObj = new Array(); //创建一个数组var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是 ...

  7. java线程跟多线程

    java创建线程两种方式: 1.继承Thread创建线程 /** * Created by lsf on 16/4/18. */ class NewThread extends Thread { Ne ...

  8. echarts在.Net中使用实例(二) 使用ajax动态加载数据

    通过上一篇文章可以知道和echarts参考手册可知,series字段就是用来存储我们显示的数据,所以我们只需要用ajax来获取series的值就可以. option 名称 描述 {color}back ...

  9. Windows 2008 IIS7.5中创建独立账号的FTP站点图文教程

    Windows 2008上的IIS7.5,FTP功能已经非常强大了,完全不下于Serv-U这样的第三方软件.本文小编就介绍在IIS7.5上配置独立账号的FTP站点. 1.创建Windows账号 右击点 ...

  10. Query节点操作,jQuery插入节点,jQuery删除节点,jQuery Dom操作

    一.创建节点 var box = $('<div>节点</div>'); //创建一个节点,或者var box = "<div>节点</div> ...