Mac 本地终端中文无乱码, 远程服务器中文乱码

下面有些配图丢失了, 待补充

缘起

终端命令行操作时碰到中文乱码的问题, 很困惑, 因为

  • 本地文件的中文能够正常显示;
  • 登录远程服务器后, 中文显示不正常;

尝试解决

第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)]

这时候使用测试远程服务器, 能够正常显示了:


Mac 本地终端中文无乱码, 远程服务器中文乱码_第1张图片
中文乱码04

波折

但是第二次再次登录服务器后发现仍然中文乱码! 使用命令行 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的补充

如果你觉得我的文章对你有用, 麻烦给些改进的建议, 或者打个"喜欢" _

你可能感兴趣的:(Mac 本地终端中文无乱码, 远程服务器中文乱码)