解决Tomcat控制台乱码、HTML乱码、system.out.println输出乱码、out.print乱码

文章详细介绍了如何解决Tomcat控制台乱码以及HTML、servlet输出的乱码问题,包括修改Tomcat配置文件,统一IDEA的文件编码设置,更新web.xml的编码配置,以及在HTML文档中指定charset。同时强调了删除不必要的-Dfile.encoding=UTF-8设置的重要性。
摘要由CSDN通过智能技术生成

开发环境

JDK8、IDEA 2023.1.2 (Ultimate Edition)、Tomcat 9.0.71

Tomcat控制台乱码

第一步:修改Tomcat目录下的 ./conf/logging.properties 文件,将3处UTF-8改为GBK,分别对应下图 IDEA 中的3个控制台的输出
在这里插入图片描述
在这里插入图片描述
第二步:删掉无用设置:删掉IDEA自定义VM选项的 -Dfile.encoding=UTF-8 ,删掉IDEA中Tomcat运行配置的虚拟机选项和传递的环境变量
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

HTML 乱码、system.out.println输出乱码、out.println乱码

第一步:IDEA 设置:文件->设置->搜索”编码“(未安装中文插件时搜索”encoding“),按如下设置,全部统一为UTF-8
在这里插入图片描述
第二步:在 web.xml 中写入以下这段设置,使得servlet读取html时使用utf-8

    <!--HTML按UTF-8加载,默认为GBK-->
    <jsp-config>
        <jsp-property-group>
            <url-pattern>*.html</url-pattern>
            <page-encoding>UTF-8</page-encoding>
        </jsp-property-group>
    </jsp-config>

第三步:HTML文档指定charset为UTF-8:<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta charset="UTF-8"> 都可以,然后注意查看HTML文档的右下角编码格式是否正确。
在这里插入图片描述
第四步:servlet跳转语句之前设置文件类型和编码 response.setContentType("text/html;charset=utf-8");,这样保证了out.print的编码为UTF-8
在这里插入图片描述
第五步:删掉无用设置:删掉IDEA自定义VM选项的 -Dfile.encoding=UTF-8 ,删掉IDEA中Tomcat运行配置的虚拟机选项和传递的环境变量
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总结

  • Tomcat控制台乱码容易解决,只需要修改文件里的三个UTF-8为GBK即可
  • HTML乱码、system.out.println输出乱码、out.print乱码的原因为文件、servlet、浏览器三者对数据流的编解码不同。第一步统一文件编码保证了基础,第二步修改web.xml文件改变了jsp即servlet读取html文件的编码格式(默认为GBK,与地区有关,所以如果将HTML的meta标签的charset设置为GBK则不会乱码,但是推荐统一为UTF-8),第三步写meta标签保证了浏览器的展示编码为UTF-8,第四步指定了out对象打印输出的编码并规定了浏览器展示的文件类型和编码,第五步的设置对于处理本文提到的乱码没有实质性作用,故删除,保留IDEA自定义VM选项的 -Dfile.encoding=UTF-8 会导致Tomcat控制台输出乱码,保留JAVA_OPTSJAVA_TOOL_OPTIONS变量传递会导致out.print打印输出乱码

放一张乱码对照表,可自行判断错误情况
在这里插入图片描述

若未解决问题,强烈推荐阅读以下两篇文章,能全面解决您的乱码问题,了解背后的原理

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叶涟风不息

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值