欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

编码与乱码

程序员文章站 2022-04-18 17:27:50
...

 

乱码的根源

源编码与目标编码的不一致. 而中文window系统默认编码GBK,害惨了多少程序员.

要尽量减少出现乱码,我个人认为要做到5码合一, IDE(Eclipse/idea),页面(jsp/其他模板引擎),应用服务器(tomcat等), 源码(Java源码及周边文件),数据库编码.

 

将Eclipse设置为UTF-8

打开Eclipse安装目录下的eclipse.ini,在最末尾新增一行

-Dfile.encoding=UTF-8

修改之后的,重启eclipse即可.

 

JSP页面编码

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
 

tomcat编码

打开 tomcat安装目录下的 bin\setenv.bat ,该文件通常不存在,新建之, 添加如下内容

set JAVA_OPTS=-Dfile.encoding=UTF-8

打开conf\server.xml, 在8080端口所属的Connector节点,添加URIEncoding,可解决大部分GET请求中文乱码的问题

URIEncoding="UTF-8"
 

源码的编码

通常情况下, 文件本身的编码,取决于新建文件时,IDE或Project的编码.

另外一个隐藏的编码,是maven/ant编译java源文件时使用的编码

maven的配置如下

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 

数据库编码

通常来说,如果其他4码解决了,那大部分情况下是mysql会出现编码问题

mysql有4个编码

Server characterset:    utf8      // 服务器字节集
Db     characterset:    utf8      // 当前数据集字节集
Client characterset:    utf8      // 客户端字节集
Conn.  characterset:    utf8      // 当前连接的字节集

修改my.ini的mysqld小节,设置服务器字符集,是最佳解决方式

[mysqld]
character-set-server = utf8

然而,对于现有系统,全局修改的风险比较大,所以,可以在客户端解决,即jdbcurl上做配置

jdbc:mysql://127.0.0.1/nutzdemo?useUnicode=true&characterEncoding=UTF-8

 

参考资料:

1.编码与乱码 (wendal大神)