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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • php面试题及答案2020_最新php面试题

    php面试题及答案2020_最新php面试题1、PHP语言的一大优势是跨平台,什么是跨平台?PHP的运行环境最优搭配为Apache+MySQL+PHP,此运行环境可以在不同操作系统(例如windows、Linux等)上配置,不受操作系统的限制,所以叫跨平台2、WEB开发中数据提交方式有几种?有什么区别?百度使用哪种方式?Get与post两种方式区别:1.Get从服务器获取数据,post向服务器传送数据2.Get传…

    2022年8月29日
    4
  • Mybatis 拦截器简述[通俗易懂]

    Mybatis 拦截器简述[通俗易懂]一、Mybatis拦截器可以做到什么慢查询,SQL异常监控数据预处理(加密,自生成字段)数据脱敏数据权限过滤二、MybatisSQL执行流程这里重点关注InterceptorChain,它会为Mybatis的四大对象织入代理。我们自定义生成的拦截器也将通过InterceptorChain织入。三、Mybatis拦截器使用方式拦截粒度为方法签名自定义拦截器需使用@Intercepts和@Signature注解来指定拦截类和方法。例如拦截Exceptor的query和update

    2022年9月8日
    3
  • POI导出excel执行公式 公式不生效问题[通俗易懂]

    POI导出excel执行公式 公式不生效问题[通俗易懂]excel模板设置好公式即可。在下面这行代码:workbook.write(out);// 输出Excel内容,生成Excel文件 之前,添加这个语句:workbook.setForceFormulaRecalculation(true);// 执行公式。workbook.setForceFormulaRecalculation(true);// 执行公式workbook.write(out);// 输出Excel内容,生成Excel文件…

    2022年8月19日
    11
  • ubuntu ll命令[通俗易懂]

    ubuntu ll命令[通俗易懂]用过Redhat的朋友应该很熟悉ll这个命令,就相当于ls-l,但在Ubuntu中就不行了。严格来说ll不是一个命令,只是命令的别名而已。很多Linux用户都使用bashshell,对普通用户来说用得最多的就是命令补全(按tab键)和alias(别名)功能。Ubuntu默认建立的用户都用的bashshell,所以它也支持别名功能,我们只需要gedi

    2022年9月24日
    1
  • 单片机控制步进电机-电路连接

    单片机控制步进电机-电路连接单片机控制步进电机-线路连接说明:如何利用单片机去控制步进电机?本案例讲解的内容是硬件连接部分,采用常用的电子器件去实现单片机控制步进电机的功能。后续会分别讲解单片机程序,S曲线生成方法,上位机等相关内容。硬件清单:1、单片机最小系统(本案例使用Atmega16芯片)2、步进电机(二相四线)3、稳压电源(24V)4、步进电机驱动器(TB6600)整体连接图:原理图:控制原…

    2022年5月31日
    31
  • Nginx负载均衡算法分析[通俗易懂]

    Nginx负载均衡算法分析[通俗易懂]随着互联网信息的爆炸性增长,负载均衡(loadbalance)已经不再是一个很陌生的话题,顾名思义,负载均衡即是将负载分摊到不同的服务单元,既保证服务的可用性,又保证响应足够快,给用户很好的体验。快速增长的访问量和数据流量催生了各式各样的负载均衡产品,很多专业的负载均衡硬件提供了很好的功能,但却价格不菲(如F5BIG-IP、CitrixNetScaler、Radware等等,虽然可以解决问题

    2022年10月12日
    2

发表回复

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

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