一、问题现象
在一个技术讨论群碰到一个有趣的故障,正好闲的没事,帮助小白排查一下。
前端页面返回的后台数据乱码,如下所示:
二、排查思路
像这种乱码问题,排查思路还是很好处理。
locale看下服务器的编码和数据库的编码就行了,这里要注意的是,不能只看 mysql 数据库和编码,还要看character_set_client
character_set_connection
character_set_results 的编码。
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
如果还是不行,那就 java -Dfile.encoding=UTF-8 指定编码试试看
如果还是不行,那可能是服务器少了中文字体导致的。去网上下载常见的中文编码然后放到/usr/share/fonts 目录下,然后fc-cache -fv 刷下缓存,fc-list 看看有没有加载进来,需要重启下服务。
三、解决方案
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
这个问题就很明显了,latin1 不支持中文编码,改下数据库配置文件,然后重启一下。不过之前导入的数据可能就已经是乱码了,需要重新再导入一遍。
为什么说这个故障很有趣呢?因为这个小白从头到尾给我的信息都是错的,最后误导我去排查 nginx 的问题,理论上不应该是 nginx 的系统中文字体的问题,最后让他都试试看,最后还是不行才让他给我看数据库的编码。
评论