console下运行locale时,发现LC_ALL变量的值是空的。如果设置了这个值,则ls结果不会乱码。
在/etc/locale.conf中设置LC_ALL=zh_CN.UTF-8后重启。结果无效,还是乱。但是此时运行locale的结果中,LC_ALL仍旧没有设置值。
查看/etc/profile.d/locale.sh, 发现没有对LC_ALL做处理,所以即使在/etc/locale.conf中设置了LC_ALL也不起作用。于是在这里增加了对LC_ALL的处理代码:
[ -n "$LC_ALL" ] && export LC_ALL
重启后,乱码都没有了,而且以前是英文的地方也变成中文了。