编码与乱码

Posted jycjy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编码与乱码相关的知识,希望对你有一定的参考价值。

 

乱码的根源

源编码与目标编码的不一致. 而中文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大神)

以上是关于编码与乱码的主要内容,如果未能解决你的问题,请参考以下文章

Servlet 知识点 中文乱码的本质与解决

java爬虫一段话里的部分字符乱码解决

eclipse中文乱码问题解决方案

关于乱码问题的解决与HttpServletResponse中的方法

CentOS7的中文乱码原因及编码设置

eclipse字体乱码怎么解决