记录我的一些生活写照、无聊的牢骚、内心世界的活动 注册 | 登陆

Linux系统中文名称乱码问题的解决

Linux系统中文名称乱码问题的解决

在Debian系统中,如果使用的是最小安装的系统,没有中文字库,一般先设置Debian服务器的字符集。
服务器字符集配置文件为/etc/locale.gen, 最后一行是服务器默认字符集编码
服务器默认字符集设置,一般就选一种,e.g. zh_CN.UTF-8 UTF-8
XML/HTML代码
  1. cat /etc/locale.gen
  2. ...
  3. # zh_TW.EUC-TW EUC-TW
  4. # zh_TW.UTF-8 UTF-8
  5. # zu_ZA ISO-8859-1
  6. # zu_ZA.UTF-8 UTF-8
  7. zh_CN.UTF-8 UTF-8
如果/etc/locale.gen最后一行不是zh_CN.UTF-8 UTF-8, 用 ‘dpkg-reconfigure locales’ 设置服务器的默认字符集为zh_CN.UTF-8 UTF-8, 可能要重新启动服务器才生效。
SecureCRT的字符集设置 Winscp文件名为utf8编码设置 参考 CSDN
如果上传到服务器或者看到的文件是乱码,可以试试convmv
XML/HTML代码
  1. sudo apt-get install convmv
为了保险起见,先备份一下要转换的文件夹
XML/HTML代码
  1. convmv 使用方法:
  2. convmv -f 源编码 -t 新编码 [选项] 文件名
  3. 常用参数:
  4. -r 递归处理子文件夹
  5. –notest 真正进行操作,默认情况下是不对文件进行真实操作
  6. –list 显示所有支持的编码
  7. –unescap 可以做一下转义,比如把%20变成空格
  8. 示例:
  9. convmv -f GBK -t UTF-8 --notest  *.mp3
  10. 此命令将所有mp3的文件名转码
参考1  参考2  参考3
出现这种情况大部分是win系统上传中文文件造成的,win系统一般使用GBK,传到Linux系统上不会识别就成了乱码,甚至删不掉访问不了,就需要转换成UTF8这种Linux系统支持的,convmv就是把GBK转成了UTF8,从而可以访问。目前还仅限于winscp之类图形管理软件可以显示中文,终端还不能显示中文。
如果需要终端直接显示中文,需要编辑 /etc/profile,在文件的最后加上
XML/HTML代码
  1. export LC_ALL="zh_CN.UTF-8"
  2. export LC_CTYPE="zh_CN.UTF-8"
  3. export LANG="zh_CN.UTF-8"
或者直接粘贴以下命令就可以直接生效
XML/HTML代码
  1. sed -i '$a \export LC_ALL="zh_CN.UTF-8"' /etc/profile
  2. sed -i '$a \export LC_CTYPE="zh_CN.UTF-8"' /etc/profile
  3. sed -i '$a \export LANG="zh_CN.UTF-8"' /etc/profile
  4. source  /etc/profile
再使用命令 ls 就可以直接看到中文的文件名。简单来说就是 locale 命令切换 zh_CN.UTF-8  然后添加到系统变量,最后重新加载 profile 就可以。
也可以用懒人一键脚本:
Github:https://github.com/FunctionClub/LocaleCN
XML/HTML代码
  1. wget -N --no-check-certificate https://raw.githubusercontent.com/FunctionClub/LocaleCN/master/LocaleCN.sh && bash LocaleCN.sh
一键脚本支持:Debian 8/9 Ubuntu 14/16 CentOS 6/7 ,理论上支持更高版本的系统,具体自测。

« 上一篇 | 下一篇 »

发表评论

评论内容 (必填):