Quantcast
Channel: 代码至上 - Codeup.org
Viewing all articles
Browse latest Browse all 10

Ubuntu 时间字符集问题及解决

0
0

最近在使用命令行查看文件属性时发现执行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词条


Viewing all articles
Browse latest Browse all 10

Latest Images

Trending Articles





Latest Images