Servlet总结十三:程序乱码解决方案

createh52个月前 (02-01)技术教程11

乱码经常出现在什么位置

  • 数据保存过程中的乱码
  • 数据展示过程中的乱码
  • 数据传递过程中的乱码

数据保存过程中的乱码

  • 数据保存到数据库表中的时候,数据出现乱码
  • 导致数据保存过程中的乱码包括以下两种情况:
  • 前一种情况:在保存之前,数据本身就是乱码,保存到数据库表中的时候一定是乱码
  • 第二种情况:保存之前,数据不是乱码,但是由于数据库本身数据库不支持简体中文,保存之后出现乱码

数据展示过程中的乱码

  • 最终显示到网页上的数据出现中文乱码
  • 怎么解决?

经过执行Java程序之后,Java程序负责向浏览器响应的时候,中文乱码Java程序中设置响应的内容类型,以及对应的字符字符集response.setContentType("text/html;charset=UTF-8");

没有经过Java程序,直接访问的是静态页面文件编码时字符集,与浏览器解析时使用的字符集要一致,例如文件编码时使用的字符集是UTF-8,那么可以在网页文件中使用<meta charset="UTF-8">标签来指定网页编码时使用的字符集

数据传递过程中的乱码

  • 将数据从浏览器发送给服务器的时候,服务器接收到的数据时乱码

浏览器对数据进行编码发送到服务器(GET)

  1. GET请求的数据在请求体,所以会对部分URL进行编码
  2. 如何编码将表单中的数据(键值对)经过URLencode编码后追加到url中(URLencode编码过程使用的字符集由浏览器决定)
  3. 编码流程图

服务器接收到数据进行解码

  1. 如何解码以Tomcat7.0为例,Tomcat会使用默认的ISO-8859-1进行解码,此时字符集可能与浏览器端编码的字符集不同而出现乱码
  2. 解码流程图


浏览器对数据进行编码发送到服务器(POST)

  1. POST请求方式数据在请求体中
  2. 如何编码将表单中的数据(键值对)经过URLencode编码后放到请求体中(URLencode编码过程使用的字符集默认由网页标签属性设置决定)
  3. 编码流程图


服务器接收到数据进行解码

  1. 如何解码以Tomcat7.0为例,Tomcat会使用默认的ISO-8859-1进行解码,此时字符集可能与浏览器端编码的字符集不同而出现乱码(可通过Java程序进行字符集的设置)
  2. 解码流程图


解决方法

适用于POST和GET

//获取乱码字符
String value = request.getParameter("name");
//将乱码字符通过错误的ISO-8859-1编码方式重新还原回去
byte[] bytes = dname.getBytes("ISO-8859-1");
//再通过正确的编码方式进行解码
value = new String(bytes, "UTF-8");

仅支持POST请求

//设置字符编码方式
request.setCharacterEncoding("UTF-8");
//获取正确的字符
String value = request.getParameter("name");

仅支持GET

修改Tomcat默认的编码字符集

修改CATALINA_HOME/conf/server.xml文件,
加上URLEncoding="UTF-8"属性,设置请求行上的编码方式,解决GET请求乱码

<Connector port="8080" 
    protocol="HTTP/1.1"
    connectionTimeout="20000"
    redirectPort="8443" 
    URLEncoding="UTF-8"/>

URLencode

是将字符通过某种字符集进行编码后,再使用百分号编码

如字符通过UTF-8字符集进行编码后得到的二进制文件,然后将二进制转化为16进制,在每一个字符前面加上%作为分隔

          UTF-8                            百分号编码
"销售部"  ------> E9 94 80 E5 94 AE E9 83 A8 ------> %E9%94%80%E5%94%AE%E9%83%A8



相关文章

照着做!三步搞定Intellij IDEA中文乱码问题

关于JAVA IDE开发工具,Eclipse系列和Intelli IDEA是大部分公司的主要选择,从开发者的选择角度,Intellij IDEA似乎比Eclipse系列更受欢迎一些。当我们使用Inte...

彻底搞定JAVA乱码问题来龙去脉(java如何处理乱码)

在从事JAVA软件程序开发过程中之所以遇到乱码,问题根本原因是解码和编码不一致造成的,比如将某字符串采用utf8编码存入txt,但是读出时却采用gbk,那么打印字符串时输出肯定是会出现乱码的。这个根本...

IDEA中控制台输出是中文显示乱码(idea控制台中文输出是问号)

最近学习JAVA,作为一个新手小白,对编程的认知为0。跟随网上的教程学习,安装上IDEA工具后,每次输入语句中有中文时,只要执行就会显示乱码,太搞心态。问题如下图:作为小白,有问题肯定找度娘呀,可这次...

使用httpclient post请求中文乱码解决办法

【ps:本文为凯哥java实际工作中要到错误系列教程,在文章末尾会有本系列其他教程传送门】 概要:在使用httpclient发送post请求的时候,接收端中文乱码问题解决。正文:我们都知道,一般情况下...

# mysql 中文乱码问题分析(#mysql表中文乱码)

# mysql 中文乱码问题分析## 一、问题分析:MySQL 中文乱码通常是因为字符集设置不正确导致的。MySQL 有多种字符集,如 latin1、utf8、utf8mb4 等,如果在创建数据库、数...

5分钟课堂:输入输出汉字乱码的解决方法

从JDK 19升级到JDK 21和22之后,之前示例程序出现键盘输入的汉字在程序处理时乱码。具体现象:只要是键盘输入的汉字,不管是输出还是保存到文件,汉字都是乱码,而程序中的汉字字符串常量的输出和保存...