乱码的根源
源编码与目标编码的不一致. 而中文window系统默认编码GBK,害惨了多少程序员.
要尽量减少出现乱码,我个人认为要做到5码合一
IDE(Eclipse/idea)
页面(jsp/其他模板引擎)
应用服务器(tomcat等),
源码(Java源码及周边文件)
数据库编码
将java全局的文件编码设置为UTF-8
在开发、测试、生产环境中必须添加环境变量:
JAVA_TOOL_OPTIONS 这个变量的值为 -Dfile.encoding=UTF-8
set JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8
将Eclipse设置为UTF-8
打开Eclipse安装目录下的eclipse.ini,在最末尾新增一行
-Dfile.encoding=UTF-8
修改之后的,重启eclipse即可,直接使用第一步的环境变量的话这个操作就不用了
JSP页面编码
但是为了应用安全和可维护性建议不要使用jsp技术,尤其是tomcat 10开始,jsp带有类似于php的eval函数,非常危险。
tomcat编码
打开 tomcat安装目录下的 bin\setenv.bat ,该文件通常不存在,新建之, 添加如下内容
set JAVA_OPTS=-Dfile.encoding=UTF-8
直接使用第一步的环境变量的话这个操作就不用了
打开conf\server.xml, 在8080端口所属的Connector节点,添加URIEncoding,可解决大部分GET请求中文乱码的问题
URIEncoding="UTF-8"
get请求一般都是用来请求静态资源的,可以把这些带有中文的参数都使用post进行交互。
源码的编码
通常情况下, 文件本身的编码,取决于新建文件时,IDE或Project的编码.
另外一个隐藏的编码,是maven/ant编译java源文件时使用的编码
maven的配置如下
UTF-8
这个是个坑点,被坑了好多次了,哈哈哈
数据库编码
可以直接使用myql8.x 默认就是utf8mb4