Java中文乱码问题如何解决?

Java中文乱码问题如何解决?中文乱码问题一、POST请求参数中文乱码二、Response获取流对象中文乱码一、POST请求参数中文乱码在输入中文或特殊字符时,POST请求参数会出现乱码,由于POST参数是在请求体中,获取POST请求参数通过流来获取,我们设置流的编码即可解决中文乱码问题。因为get方式请求参数在url中,post方式请求参数在请求体中,虽然通过getParameter方式获取参数,但内部仍然是通过流获取参数的值,需要设置流的字符集。【解决办法】:获取请求参数之前,设置流的编码re

大家好,又见面了,我是你们的朋友全栈君。

当页面中提交包含中文的请求时,在服务端有可能出现中文乱码问题。

一、乱码产生原因

Http协议中规定,数据传输采用字节编码方式,因为通信的数据不仅仅是字符。当用户通过浏览器提交一个包含 UTF-8 编码格式的两个字的中文请求时,浏览器会将这两个中文字符变为六个字节(一般一个 UTF-8 汉字占用三个字节),并将这六个字节上传至 Tomcat 服务器。
Tomcat 服务器在接收到这六个字节后,并不知道它们原始采用的是什么字符编码。而Tomcat默认的编码格式为 ISO-8859-1。所以会将这六个字节按照 ISO-8859-1 的格式进行编码,编码后在控制台显示,所以在控制台会显示乱码。

二、请求乱码解决方案

2.1 针对POST提交方式

在接收请求参数之前先通过 request 的 setCharacterEncoding()方法,指定请求体的字符编码格式。

注意:这种方式只能解决POST提交方式中的乱码问题,对于GET提交方式不起作用。因为该方法设置的是请求体中的字符编码,GET提交中的参数不出现在请求体中,而出现在请求行

在这里插入图片描述

2.2 针对GET提交方式

对于请求路径中所携带参数的解析,由 Tomcat 服务器完成。而 Tomcat 服务器的字符编码默认为 ISO8859-1,所以会将请求路径中所携带的数据,按照 ISO8859-1 进行编码。
在这里插入图片描述
可以通过修改Tomcat默认字符编码的方式来解决GET提交方式中携带中文的乱码问题。
在这里插入图片描述
重启 Tomcat 服务器后, GET 提交方式的中文乱码问题解决。

2.3 万能解决方案

该方式无需设置 Tomcat 中的 server.xml 中的 Tomcat 默认字符编码,无需设置 request 的请求体的字符编码。该方式针对 POST 与 GET 提交方式,均起作用。
在这里插入图片描述

三、响应乱码解决方案

response 对象获取流的编码字符集是 ISO-8859-1,浏览器默认的字符编码是 GBK(GB2312)

PrintWriter pw = response.getWriter();        // 获取的流的默认编码是 ISO-8859-1

【解决办法】:获取流对象之前,设置流的编码

response.setContentType("text/html;charset=utf-8");

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/157139.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • oracle sequence order_oracle session

    oracle sequence order_oracle session在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方。  1、Create Sequence  你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限,  CREATE SEQUEN

    2022年10月10日
  • static–静态变量与普通变量的区别

    static–静态变量与普通变量的区别静态变量与普通变量的区别全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而静态全局变量则限制了其作用域,即只在定义该变量的源文件内有效,…

  • Agora iOS SDK-开始聊天

    Agora iOS SDK-开始聊天

  • 有序的四字成语_LinkedHashMap

    有序的四字成语_LinkedHashMapHashMap是无序的,HashMap在put的时候是根据key的hashcode进行hash然后放入对应的地方。所以在按照一定顺序put进HashMap中,然后遍历出HashMap的顺序跟put的顺序不同(除非在put的时候key已经按照hashcode排序号了,这种几率非常小)单纯的HashMap是无法实现排序的,这的排序是指,我们将键值对按照一定的顺序put进HashMap里,然后在进行

  • bootstrap模态框modal使用remote动态加载内容,第二次加载显示相同内容解决办法…

    bootstrap模态框modal使用remote动态加载内容,第二次加载显示相同内容解决办法…

  • django配置文件详解_pycharm配置python

    django配置文件详解_pycharm配置python前言django框架的日志通过python内置的logging模块实现的,既可以记录自定义的一些信息描述,也可以记录系统运行中的一些对象数据,还可以记录包括堆栈跟踪、错误代码之类的详细信息。log

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号