首页 > 代码库 > 项目部署过程中 解决页面乱码问题的经历

项目部署过程中 解决页面乱码问题的经历

    本文转载自http://blog.163.com/lucia_gagaga/blog/static/26476801920167256342858/

项目部署完毕之后 数据库里面的数据读到页面上是乱码 就像这样子:

技术分享

为了解决这个乱码问题 花费了一周的时间 请教了好多老师同学同事
最后是做了这么几件事才给搞好的:
1. 借助 notepad++ 把 .sql 文件的编码格式改成 utf8
2. 替换 mysql 的 my.cnf 文件 并加入指定字符集的语句
3. 使用终端命令重新导入 .sql 文件
4. 各种重启 清除浏览器缓存

首先解释[1. 借助 notepad++ 把 .sql 文件的编码格式改成 utf8]:
项目使用的 .sql 文件是从 war 包里面自动解压出来的 使用 vim 命令观察下:

技术分享

这个自动解压出来的文件 本身就显示为乱码了
把它从 Linux 下面拿到 windows 下面 使用 notepad++ 打开 保存为 utf8 无 BOM 格式

技术分享

然后给它移回到原来的位置
因为本项目做成了一个 nginx 后面挂载两个 tomcat 的架构 所以两个 tomcat 下面的 .sql 文件都要处理
处理完了之后 使用 vim 命令再次检查下 确保 .sql 文件本身已经没有问题了:

技术分享

然后来解释[2. 替换 mysql 的 my.cnf 文件 并加入指定字符集的语句]
首先看下替换之前的 my.cnf 文件:

技术分享

这个文件的作用之一 就是指定 mysql 的字符集 字符集与乱码问题一定有关
但是这个文件 一看就是之前经过了多次删减 已经被改动得面目全非 缺少了很多内容 不能继续使用了
在这个文件的作用下 当前 mysql 的字符集是这样的:

技术分享

而正确的字符集应该是这样的:

技术分享

所以 需要替换一个正确的 my.cnf 文件过来 那么 去哪里找这个正确的 my.cnf 文件呢?
http://www.cnblogs.com/HondaHsu/p/3640180.html 最后是从这个帖子里面找到了方法

技术分享

[root@localhost bin]#
[root@localhost bin]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
cp: overwrite `/etc/my.cnf‘? y
[root@localhost bin]#
然后 使用 vim 命令 修改这个替换过来的 my.cnf 文件

技术分享

改好之后 随手把 mysql 重启一下 再来查看 mysql 的字符集

技术分享

这时候 字符集已经改对了 感觉距离胜利又近了一步

再来解释[3. 使用终端命令重新导入 .sql 文件]
现在 .sql 文件也是好的 mysql 的默认字符集也是好的 就差导入 .sql 文件了
为了防止第三方工具篡改 .sql 文件 (事实上踩过坑之后知道第三方工具确实有时候会篡改 .sql 文件)
所以使用命令行方式来做这件事是最保险的
mysql> show databases;
mysql> drop database dangdang_lucia;
mysql> create database dangdang_lucia;
mysql> use dangdang_lucia;
mysql> source /usr/local/tomcat1/webapps/dangdang_dk/WEB-INF/classes/dang.sql
导入之后 直接 select 一下 最后一次确认没有乱码的存在:

技术分享

最后就是[4. 各种重启 清除浏览器缓存]
这个就是为了保险起见 把 nginx 重启 两个 tomcat 分别重启 mysql 也给它再重启一下
然后清除掉刚才显示乱码的浏览器缓存 终于来到了见证奇迹的时刻

技术分享
 

项目部署过程中 解决页面乱码问题的经历