项目部署过程中 解决页面乱码问题的经历
本文转载自http://blog.163.com/lucia_gagaga/blog/static/26476801920167256342858/
项目部署完毕之后 数据库里面的数据读到页面上是乱码 就像这样子:
![项目部署过程中
解决页面乱码问题的经历 - 一头小鹿 - 一头小鹿在写博客](http://img2.ph.126.net/v1UnfioRxbOaSuVgxs_u7Q==/6631539456188948132.png)
为 了解决这个乱码问题 花费了一周的时间 请教了好多老师同学同事
最后是做了这么几件事才给搞好的:
1. 借助 notepad++ 把 .sql 文件的编码格式改成 utf8
2. 替换 mysql 的 my.cnf 文件 并加入指定字符集的语句
3. 使用终端命令重新导入 .sql 文件
4. 各种重启 清除浏览器缓存
首先解释[1. 借助 notepad++ 把 .sql 文件的编码格式改成 utf8]:
项目使用的 .sql 文件是从 war 包里面自动解压出来的 使用 vim 命令观察下:
![项目部署过程中 解决页面乱码问题的经历 - 一头小鹿 - 一头小鹿在写博客](http://img0.ph.126.net/eLtfAzS5OzKePNsQ1XRT8Q==/6631462490375006961.png)
这 个自动解压出来的文件 本身就显示为乱码了
把它从 Linux 下面拿到 windows 下面 使用 notepad++ 打开 保存为 utf8 无 BOM 格式
![项目部署过程中 解决页面乱码问题的经历 - 一头小鹿
- 一头小鹿在写博客](http://img1.ph.126.net/YhkH_VtjKc1_iYyPcBtj1g==/6631695586840089421.png)
然 后给它移回到原来的位置
因为本项目做成了一个 nginx 后面挂载两个 tomcat 的架构 所以两个 tomcat 下面的 .sql 文件都要处理
处理完了之后 使用 vim 命令再次检查下 确保 .sql 文件本身已经没有问题了:
![项目部署过程中 解决页面乱码问题的经历 - 一头小鹿 - 一头小鹿在写博客](http://img2.ph.126.net/gqVTI2IVqXk-QzaBvCvSHg==/6631776950700551123.png)
然 后来解释[2. 替换 mysql 的 my.cnf 文件 并加入指定字符集的语句]
首先看下替换之前的 my.cnf 文件:
![项目部署过程中 解决页面乱码问题的经历 - 一头小鹿 - 一头小鹿在写博客](http://img0.ph.126.net/wzHIZ_qsG5NLyHYeMkHjTg==/6631756059979622532.png)
这 个文件的作用之一 就是指定 mysql 的字符集 字符集与乱码问题一定有关
但是这个文件 一看就是之前经过了多次删减 已经被改动得面目全非 缺少了很多内容 不能继续使用了
在这个文件的作用下 当前 mysql 的字符集是这样的:
![项目部署过程中 解决页面乱码问题的经历 - 一头小鹿 - 一头小鹿在写博客](http://img1.ph.126.net/_mQUxHcYAUXd3uLTJry3Bg==/6631836324328470457.png)
而 正确的字符集应该是这样的:
![项目部署过程中 解决页面乱码问题的经历 - 一头小鹿 -
一头小鹿在写博客](http://img0.ph.126.net/zY0Pz-4Jy3C-Bh1qdp_PoQ==/6631510868886626556.png)
所 以 需要替换一个正确的 my.cnf 文件过来 那么 去哪里找这个正确的 my.cnf 文件呢?
http://www.cnblogs.com/HondaHsu/p/3640180.html 最后是从这个帖子里面找到了方法
![项目部署过程中 解决页面乱码问题的经历 - 一头小鹿 -
一头小鹿在写博客](http://img0.ph.126.net/In-izPzjRIIYVxbEEDWn0w==/6631664800514523516.png)
[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 文件
![项目部署过程中
解决页面乱码问题的经历 - 一头小鹿 - 一头小鹿在写博客](http://img0.ph.126.net/-NHOCO83F0cXxSR4R3cevw==/6631621919561027514.png)
改 好之后 随手把 mysql 重启一下 再来查看 mysql 的字符集
![项目部署过程中
解决页面乱码问题的经历 - 一头小鹿 - 一头小鹿在写博客](http://img2.ph.126.net/JgXuoco0w0HLRd6MYNrDmg==/6631553749840106393.png)
这 时候 字符集已经改对了 感觉距离胜利又近了一步
再来解释[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 一下 最后一次确认没有乱码的存在:
![项目部署过程中
解决页面乱码问题的经历 - 一头小鹿 - 一头小鹿在写博客](http://img0.ph.126.net/bguQrKuw9Bb2GsMAUghE7Q==/6631591133235459141.png)
最 后就是[4. 各种重启 清除浏览器缓存]
这个就是为了保险起见 把 nginx 重启 两个 tomcat 分别重启 mysql 也给它再重启一下
然后清除掉刚才显示乱码的浏览器缓存 终于来到了见证奇迹的时刻
![项目部署过程中
解决页面乱码问题的经历 - 一头小鹿 - 一头小鹿在写博客](http://img0.ph.126.net/NNDsTbwJc_M2Q-6Rapt2Ww==/6631532859119183661.png)