今天帮小朋友做一个项目,碰到一个挺搞的问题。在帮她安装mysql的时候一直是next,没有去注意一些细节,不晓得有没有漏掉设置编码那一部分=。=。
结果在用sql文件导入数据库MySQL -h localhost -u root -p xxx < e:\xxx.sql 执行的时候错误提示出来了,显然是编码的问题,(问题描述类似这样:)后来用status看了一下。
server characterset,DB characterset,client characterset,conn characterset 都是Latin1. 显然问题出现在这里。然后停止了服务,找到my.ini,修改了相应的地方。在[mysql][mysqld][client] 的默认编码改成gbk。启动服务,搞定~
不过这样的问题的背后其实并没有那么简单,在网上找找资料,摘录并总结如下:
- server本身设定问题,例如还停留在latin1.(我刚才的问题)
- JSP设计页面上是中文,但运行时看到的是乱码,如果是这种情况,就要指定jsp页面的编码,默认情况下,jsp页面的编码是ISO-8859-1,解决方法就是在jsp页面的编码地方加入
-
<%@ page language="java" contentType="text/html;charset=utf8" %>,
当用Request对象获取客户提交的汉字时,会出现乱码,那么就需要在项目中加入filter了,(filter在tomcat中自带的有例子,可以照着例子改一下,也可以在googl中搜索一下)
由于使用doget方法引起的乱码,可以试着使用dopost提交,
或者是打开tomcat的server.xml文件,找到区块,加入如下一行:URIEncoding=”GBK”
完整的应如下:
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100" debug="0"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="utf8"/>
需要重启tomcat。 -
写入到数据库是乱码:
如果你是通过JDBC直接链接数据库的时候,配置的代码如下:
jdbc:mysql://localhost:3306/xxxxx?useUnicode=true&characterEncoding=utf8,
这样保证到数据库中的代码是不是乱码。