下面有些配图丢失了, 待补充
缘起
终端命令行操作时碰到中文乱码的问题, 很困惑, 因为
- 本地文件的中文能够正常显示;
- 登录远程服务器后, 中文显示不正常;
尝试解决
第1步 分析
既然本地的中文无乱码, 而远程服务器的中文乱码, 肯定是本地设置编码格式和远程服务器的不一致;
第2步 查看远程服务器的编码格式
命令行 cat /etc/sysconfig/i18n
, 显示结果是 LANG="zh_CN.UTF-8"
第3步 查看本地的编码格式
命令行 locale
结果如下图所示:
[图片上传失败...(image-184a62-1540029855628)]
证实的确是本地编码设置的问题.
第4步 修改本地编码设置
命令行 export LANG=zh_CN.UTF-8
[图片上传失败...(image-e6cbc2-1540029855628)]
这时候使用测试远程服务器, 能够正常显示了:
波折
但是第二次再次登录服务器后发现仍然中文乱码! 使用命令行 locale
, 发现之前的 locale
设置被重置回去了.
查询后得知 export
命令的效力只限于当次登陆期间, 要永久修改配置, 需要在 shell 的配置文件中修改. 由于自己使用的是 zsh, 那么则需要在.zshrc 文件中设置:
执行命令 vi ~/.zshrc
, 然后在末尾添加:
export LC_ALL=zh_CN.UTF-8
export LANG=zh_CN.UTF-8
最后, 执行命令 source ~/.zshrc
使配置立即生效.
反思
Shell 的 export
命令的效力只限于当次登陆期间.
- 需要永久生效, 需要写入 Shell 的配置文件
- 先
echo $SHELL
查看系统当前使用的 Shell - 如果使用的是
/bin/bash
,配置文件在~/.bashrc
或者~/.bash_profile
. - 如果使用的是
/bin/zsh
,配置文件在~/.zshrc
.
- 先
- 修改配置文件后, 需要立即生效, 可以通过 2 种方式:
- 输入
source ~/.zshrc
或者source ~/.bashrc
来使配置立即生效, - 或者完全关闭命令行,然后重新打开
- 输入
参考文章
- StackOverflow - OS X Terminal UTF-8 issues
- 【Linux利用远程SSH连接】SecureCRT中文出现乱码解决办法 Linux服务器技术
- Mac用iTerm2连接到Linux上,不能输入中文
- oh-my-zsh中文乱码问题
文章历史
- 2017/02/12 (第一次发布)
- 2017/03/14 增加"反思"章节
- 2017/04/30 在"反思"章节增加"永久生效"和"立即生效"的方法
- 2017/05/03 修改润色
- 2017/06/04 修改润色
- 2018/11/17 完善bash的配置文件. 感谢684a80fc4bd4的补充
如果你觉得我的文章对你有用, 麻烦给些改进的建议, 或者打个"喜欢" _