核心:乱码问题是由于字符编码不一致导致的,所以解决乱码问题的核心概念是统一字符编码。
首先我们查看各个平台的字符编码:
Windows
cmd中输入chcp
命令查看(Windows系统默认字符编码时GBK)
- 936 代表 GBK
- 65001 代表 UTF-8
注意:通过chcp命令如chcp 65001
来更改字符编码只对当前控制台生效!
Idea
Setting > Editor > File Encodings
Tomcat
Tomcat安装位置 > conf > logging.properties文件
默认是 UTF-8
Tomcat乱码原因
Tomcat启动及Tomcat系统日志乱码
Tomcat启动运行会调用系统配置好的Java虚拟机,而Java虚拟机使用的字符编码是操作系统默认的字符编码。tomcat默认编码是UTF-8,Windows系统默认编码是GBK,所以Tomcat会乱码。
Tomcat运行过程中项目打印的信息乱码
我们项目在使用Tomcat调试运行时会有相应的Tomcat配置,如:
此处虚拟机参数配置为了指定项目运行时依赖的JVM的字符编码。和咱们Idea中的项目编码统一
浏览器中页面乱码
浏览器中页面乱码与否是由 项目中运行时JVM使用的编码 以及 页面指定的编码 是否统一来决定。
项目中运行时JVM使用的编码,前文Tomcat乱码已经说过了。
页面指定的编码 可以在 <head>
标签中添加子标签 <meta charset="UTF-8">
来设置
Idea控制台乱码
Idea控制台乱码与否跟 项目编码 和 项目中运行时JVM使用的编码 是否统一有关,IDEA控制台有智能解析能力(控制台支持多种编码【如IDEA控制台支持UTF-8】,控制台会自动尝试正确解析输出内容),所以即使编码不一致也不一定会乱码,但是我们尽量保持编码统一。
解决乱码问题
解决乱码问题的根源就是解决编码不一致问题,前文已经分析了各个地方的编码,可以看到很多乱码问题其实跟JVM使用的字符编码有关,JVM默认使用操作系统默认的编码(Windows默认GBK,Linux默认UTF-8)。咱们按照实际情况更改统一编码即可,推荐全部设置为UTF-8。
推荐直接更改Windows的默认字符编码为UTF-8,可能会对一些不支持UTF-8的老旧软件有影响,但对于咱们开发者来说利大于弊。
Windows11更改系统默认编码
按win键打开面板搜索并进入【语言设置】
然后进入管理语言设置
然后进入更改系统区域设置
然后勾选上 UTF-8的支持
点击确定后会提示重启电脑,重启即可设置完成。
开机后CMD控制台中输入 chcp
命令查看是否输出 65001
,输出说明更改成功。
如果项目中使用了日志框架导致日志乱码,则更改对应日志框架的字符编码设置即可。
参考:
解决Tomcat中文乱码问题——windows平台
DEA项目使用tomcat运行和页面乱码问题
访问网页中文出现乱码(Tomcat)