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");

在这里插入图片描述

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 稳定性测试_pdp职业性格测试结果分析

    稳定性测试_pdp职业性格测试结果分析最近工作过程中没少开会,产品总监与研发总监就产品可用性和稳定性开始了一轮大战。于是我搜集网络资源,罗列一些稳定性测试,只为分享。1关于软件稳定性测试的思路如何测试软件的稳定性其实是很难的,按照常规思路,只有长期的用户场景测试才能一定程度上保证软件的稳定性是可靠的,但并不能百分之百确定软件就是稳定的。软件测试本身就是由局限和尽头的,无穷的测试只能带来高成本的投入和无限期的计…

    2025年10月16日
    2
  • 软件测试缺陷报告_软件测试缺陷分析

    软件测试缺陷报告_软件测试缺陷分析软件缺陷一、软件缺陷定义二、常见的软件缺陷三、软件缺陷产生原因四、软件缺陷的生命周期五、软件缺陷报告应包含的内容六、缺陷报告模板七、企业案例分析案例1缺陷描述案例2缺陷标题提炼Author:lucky多多转载请注明出处!一、软件缺陷定义软件缺陷是计算机或程序中存在的会导致用户不能或者不方便完成功能的问题、错误、或者隐藏的功能缺陷。缺陷的存在会导致产品在某种程度上不能满足用户的需要IEEE…

    2022年9月16日
    4
  • python之多线程

    python之多线程声明:示例来源《python核心编程》前言单线程处理多个外部输入源的任务只能使用I/O多路复用,如:select,poll,epoll。特别值得注意的是:由于一个串行程序需要从每个I/O终端

    2022年7月3日
    21
  • MySQL字符串截取函数_oracle截取字符串前几位

    MySQL字符串截取函数_oracle截取字符串前几位一、left()left():顾名思义就是从左边截取字符串。用法:left(str,length),即:left(被截取字符串,截取长度)SELECTleft(‘JingLiPoSuo’,2);结果为:Ji二、right()right():顾名思义就是从右边截取字符串。用法:right(str,length),即:right(被截取字符串,截取长度)SELECTright(‘JingLiPoSuo’,2);结果为:uo三、截取特定长度的字符串截取特定长度的字符串有两

    2022年9月27日
    3
  • c语言-日期格式化[通俗易懂]

    c语言-日期格式化[通俗易懂]7-12日期格式化(5分)世界上不同国家有不同的写日期的习惯。比如美国人习惯写成“月-日-年”,而中国人习惯写成“年-月-日”。下面请你写个程序,自动把读入的美国格式的日期改写成中国习惯的日期。输入格式:输入在一行中按照“mm-dd-yyyy”的格式给出月、日、年。题目保证给出的日期是1900年元旦至今合法的日期。输出格式:在一行中按照“yyyy-mm-dd”的格式给出年…

    2022年6月9日
    47
  • 手把手教你用Hexo+Github 搭建属于自己的博客「建议收藏」

    手把手教你用Hexo+Github 搭建属于自己的博客「建议收藏」欢迎关注我的微信公众号,扫一扫下方二维码或搜索微信号stormjun,即可关注。目前专注于Android开发,主要分享Android开发相关知识和一些相关的优秀文章,包括个人总结,职场经验等。闲聊在大三的时候,一直就想搭建属于自己的一个博客,但由于各种原因,最终都不了了之,恰好最近比较有空,于是就自己参照网上的教程,搭建了属于自己的博客。至于为什么要搭建自己的博客了?

    2022年7月27日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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