深夜搞崩服务器显示,差点被中文乱码逼疯


妈的,大半夜三更,服务器又出问题了。

事情是这样的,我手贱给一台CentOS装了个什么依赖,结果重启之后发现——所有中文全都变成了方块加问号,像外星字符一样。
项目是搞跨境电商的,日志里的商品名全是中文,一眼看过去全是□□□□这种,连个“你好”都显示不出来。一开始还以为是SSH终端炸了,Tuch老大远程改了编码也没用,那时候我真有种提着榔头把板卡砸了的冲动。但这么多年运维没白干,冷静,一步一步推原因。

查了一圈,命令也是邪门。直接输出locale这玩意看到:LANG明明是zh_CN.UTF-8 ;再用locale -a翻几页,确定包含zh_CN的各编码都已经装到系统里了。那你为什么还不老实显示中文?

到这一步脸扔冰箱算了——这是个入门级问题,但如果排除权限或新进程导致的个例环境变量,最常见的漏洞其实是老生常谈的两个点

第一,当前的ssh会话拿到的LANG未必对新开的vim或者其他软件管用,看。/etc/profile没有被覆盖吧。所以第一个真实测试简单无脑:重新退出登录一遍,然后再sudo -i进去拿超级权限瞧一下变量,最好在/etc/locale.conf里手写这段:

LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh"

但别忘了存盘!! 死都出诡异。最好连锁生效一条“source /etc/locale.conf”,然后再logout出去回头看。

结果呢?服务器跟我对着干,还是一样的□□瀑布。

然后我急了——别让localegen方面调巨烦的后缀名。在西方Linux习惯瞎定制下,缺中文部分比如glibc里的common调packagrs可能实际是虚设的根本没打进生代。你就得当特务鸟一样一条东西检查:

dpkg-reconfigurelocates(apply?) or locale-gen zh_CN.*utf...

我在的是Debian类服务啦,但不实装glibc后终端不出汉字100%是会丢你火坑的。检查文件/etc/default/locale后两眼一压,它多了个LC_ALL设置是C......有的同学C习惯了全欧多无感英界来的但是、不加这一锯你又乖乖合谋自干自话。果断用echo或生文件干出去设空或明确’utf-8‘再把整台机子reboot一下...不管每次改配置都要说ssh重启session,这里改sourced reload也会有卵子用但我给它一次完整power cycle才是最猛的。”

切出去re分钟后又是几条漫长的寂寞灯走步骤.... ssh这回回神敲:ls放文件的一瞬间~!好的日语的猫语言都是带着引示显现!那几颗™过神水字符完美扑面。翻译商品表的log脚本也是清楚的字词在泪流……我自己在那个刹那就想把外壳叫张亚背五顿饭高兴的嚎了。(反正黑屏厅没人。

结束后就给很多场景参考自用标准模板了吧:

  • 先命敲locale → #看看LANG前强脑中的大轮小轮偏置 dpkg-reconfigure/uk- configsed glib工具
  • `.后缀存标准节配置f源’...并且指定LANGUAGE+组合屏蔽杂后台安全量‘误倒显slim全系统一UTF/版本推全地处理数’”
    最招打也是最提醒一次的就是出之前一定先把系统中shell bash跑logned跨工具之间环境的全面对比 —也是想再踩地散倒重训一大夜的原因变奏成绝佳复盘点。

同被这服渣气绞的一路但看到解出口直接噗我拍感觉拉兄弟回归生个梦,至暗推完了倒干净乱碼的2026的黑锅之日分享一锅到此终结!


Linux服务器运维乱码解决中文字符集

阅读量:7