文章插图
而读取文本文件内容一般有两种方式,第一种是字符流,第二种是字节流,字节流可以指定字符编码也可以通过的JVM启动参数
-Dfile.encoding
指定默认编码 。明白了上面的问题,我们就能知道为什么乱码了,这是因为IDEA的默认编码和这个日志文件的编码格式不统一导致的 。
解决方案很简单,统一两个系统的编码,对于
Tomcat
的输出的日志文件,我们可以设置Tomcat
启动的VM
选项:Edit Configurations
->Server
-> VM options
编辑添加:-Dfile.encoding=UTF-8
设置完
Tomcat
编码后,删除刚刚路径中的日志文件,重启Tomcat
服务,再使用记事本打开刚刚的日志文件,另存为我们可以发现,编码已经变成了UTF-8
。IDEA接下来设置IDEA的编码,IDEA默认编码暂时没有找到查找方式 , 我们也可以将其指定为
UTF-8
,找到IDEA的安装路径 , 在bin
目录中可以发现一个名为idea.exe.vmoptions
和idea64.exe.vmoptions
选项,分别打开,添加-Dfile.encoding=UTF-8
后,重启IDEA.完成上面两步后 , 再次启动
Tomcat
服务,你会发现日志已经正常 。注:如果依然发现乱码,则可能是IDEA缓存了当前项目的编码设置 , 你可以在当前项目的网页乱码我们都知道,浏览器浏览的网页其实是从服务器发送的HTML文件到浏览器中显示,而发送的是通过字节流传输 , 这个过程就涉及到解码->编码的过程,在.idea
文件夹中找到encoding.xml
文件,删除所有不是UTF-8
的编码设置,重启IDEA即可 。
HTTP
协议中 , 编码的协议通过Header
中的charset
中设置 。为什么放网页乱码其实很好解决,如果发现在header
,因为HTTP
请求会先解析header
, 而且header
一般不会有ascii
无法解析的字符,一般都是英文
Servlet
中,返回中文给浏览器的时候浏览器返回的是???点击
F12
,抓包网络后,找到Response Body
中的charset
选项,可以发现charset=ISO-8859-1
也就说默认的
Tomcat
使用的编码是ISO-8859-1
,这是西欧的语言编码,它是不兼容中文的 。如果你在Servlet
返回的结果中添加一点法语:? ?
或者德语什么的 , 你会发现会正常显示 。charset
的意思便是Tomcat
是以什么样的方式编码字节,而浏览器便会以这样的编码方式解码字节 。【二 Java 编码那些事】我们可以将
charset
修改为兼容中文的即可,比如UTf-8
,GB2312
等,建议使用UTF-8
,在Servlet
中,设置编码的方式为:response.setCharacterEncoding("UTF-8");
也可以如下: resp.setContentType("text/html;charset=UTF-8");
建议第一种方式 。到这里 , 所有的乱码问题都已经解决 。
其实,乱码不可怕,可怕的是经历了这么多次乱码却依然不去了解它 。
~~
微信搜索公众号:StackTrace,关注我,不断学习,不断提升
推荐阅读
- 二 Java多线程-线程关键字
- 女神降临男二什么时候知道女主素颜_女神降临男二知道素颜了么
- 一 Java多线程-线程生命周期
- 支持JDK19虚拟线程的web框架,之二:完整开发一个支持虚拟线程的quarkus应用
- 7 Java多线程:JUC(上)
- 一次 Java log4j2 漏洞导致的生产问题
- day05-JavaScript02
- 二 【性能测试】Loadrunner12.55-飞机订票系统-脚本录制
- Java获取/resources目录下的资源文件方法
- Java:既然有了synchronized,为什么还要提供Lock?