首页 > 心得笔记 > Ubuntu 时间字符集问题及解决

Ubuntu 时间字符集问题及解决

2013年1月26日  5,118 views 发表评论 阅读评论

最近在使用命令行查看文件属性时发现执行ls初始化月份字符串出错,只有时间中的汉字‘月’会显示错误,变成乱码‘▒▒’。

codeup@codeup-Ubuntu:~$ ls -l
ls: 初始化月份字符串出错
总用量 40
-rw-r–r– 1 codeup codeup 179 10▒▒ 27 06:06 examples.desktop
drwxrwxr-x 2 codeup codeup 4096 10▒▒ 27 01:05 Ubuntu One
drwxr-xr-x 2 codeup codeup 4096 10▒▒ 27 06:11 公共
drwxr-xr-x 2 codeup codeup 4096 10▒▒ 27 06:11 模板
drwxr-xr-x 2 codeup codeup 4096 10▒▒ 27 06:11 视频
drwxr-xr-x 2 codeup codeup 4096 10▒▒ 27 06:11 图片
drwxr-xr-x 2 codeup codeup 4096 10▒▒ 27 06:11 文档
drwxr-xr-x 4 codeup codeup 4096 10▒▒ 30 00:33 下载
drwxr-xr-x 2 codeup codeup 4096 10▒▒ 27 06:11 音乐
drwxr-xr-x 2 codeup codeup 4096 10▒▒ 27 21:10 桌面

后来通过命令locale查看,发现LC_TIME变量的字符集是zh_CN,我的本地应该默认使用UTF-8的字符集,但是zh_CN默认应该是使用GBK的字符集,因此在ls初始化时间时会用GBK的去解码UTF-8,因此出现乱码。注:这里zh_CN代表GBK编码只是猜测,个人没有找出到底用什么字符集解码UTF-8的汉字‘月’会变成‘▒▒’。

codeup@codeup-Ubuntu:~$ locale
LANG=zh_CN.UTF-8
LANGUAGE=zh_CN:zh:en_US:en
LC_CTYPE=”zh_CN.UTF-8″
LC_NUMERIC=zh_CN
LC_TIME=zh_CN
LC_COLLATE=”zh_CN.UTF-8″
LC_MONETARY=zh_CN
LC_MESSAGES=”zh_CN.UTF-8″
LC_PAPER=zh_CN
LC_NAME=zh_CN
LC_ADDRESS=zh_CN
LC_TELEPHONE=zh_CN
LC_MEASUREMENT=zh_CN
LC_IDENTIFICATION=zh_CN

为解决此问题,我将etc/default/locale中的LC_TIME设为zh_CN.UTF-8,与LANG保持一致。

效果:

lscodeup@codeup-Ubuntu:~$ ls -l
总用量 40
-rw-r–r– 1 codeup codeup 179 10月 27 06:06 examples.desktop
drwxrwxr-x 2 codeup codeup 4096 10月 27 01:05 Ubuntu One
drwxr-xr-x 2 codeup codeup 4096 10月 27 06:11 公共
drwxr-xr-x 2 codeup codeup 4096 10月 27 06:11 模板
drwxr-xr-x 2 codeup codeup 4096 10月 27 06:11 视频
drwxr-xr-x 2 codeup codeup 4096 10月 27 06:11 图片
drwxr-xr-x 2 codeup codeup 4096 10月 27 06:11 文档
drwxr-xr-x 4 codeup codeup 4096 10月 30 00:33 下载
drwxr-xr-x 2 codeup codeup 4096 10月 27 06:11 音乐
drwxr-xr-x 2 codeup codeup 4096 10月 27 21:10 桌面

在此全文附上locale的各项含义:

  • 语言符号及其分类(LC_CTYPE)
  • 数字(LC_NUMERIC)
  • 比较和排序习惯(LC_COLLATE)
  • 时间显示格式(LC_TIME)
  • 货币单位(LC_MONETARY)
  • 信息主要是提示信息,错误信息, 状态信息, 标题, 标签, 按钮和菜单等(LC_MESSAGES)
  • 姓名书写方式(LC_NAME)
  • 地址书写方式(LC_ADDRESS)
  • 电话号码书写方式(LC_TELEPHONE)
  • 度量衡表达方式(LC_MEASUREMENT)
  • 默认纸张尺寸大小(LC_PAPER)
  • 对locale自身包含信息的概述(LC_IDENTIFICATION)。

关于locale的更具体介绍可以参考Ubuntu的wiki词条



声明:未作说明,则本文为代码至上原创。转载务必注明出处
注意:转载须保留全文,如需修改请 联系作者
本文永久地址:http://codeup.org/archives/602


我要分享到:

新浪微博 腾讯微博 人人 Twitter Facebook 网易微博 鲜果 Follow5
分类: 心得笔记 标签: