挂载cifs分区中文乱码问题的解决,原因是locale变量设置错误

来源:互联网 发布:淘宝荷塘论坛网站 编辑:程序博客网 时间:2024/06/05 18:22

挂载cifs分区,遇到中文乱码问题。

命令是mount.cifs //192.168.1.100/MyData /mnt/my-data -o iocharset=utf-8,已经确定是正确的。

但是在Konsole中中文仍然显示成问号,在Dolphin中中文会显示成乱码。


经过实验,设置LANG=zh_CN.UTF-8;LC_ALL=zh_CN.UTF-8后即可正确显示中文。

但是这样会导致整个界面都是中文了。

而我的要求是界面元素(菜单、命令提示等)是英文,业务内容可以是中文(文件内容,文件名等)。


学习了一下locale技术,下面是几个材料:

关于locale的设定 Simple HOWTO:      http://www.linuxsir.org/bbs/showthread.php?t=245474

localedef命令的man page:          http://www.calpoly.edu/cgi-bin/man-cgi?localedef 

Gentoo Chinese Localisation Guide :     http://blog.sina.com.cn/s/blog_4ac209d301000730.html

Gentoo Linux/x86 手册的环境变量章节:    http://www.gentoo.org/doc/zh_cn/handbook/handbook-x86.xml?part=2&chap=5


下面补充一些我在在搞这个事情时遇到的一些问题:

1. LANG和LC_ALL应该设置成什么?

    我想搭建界面是英文,可以输入中文的系统,资料中建议LC_CTYPE=zh_CN.UTF-8。我发现并不必要,字符编码是UTF-8即可。

    资料中也建议同时设置LANG和LC_*,我看man locale后,发现LANG只是在LC_*没有设置的时候提供缺省值用,只要设置了LC_ALL,就不再需要设置LANG。

    所以我最后的设置是:

   LC_ALL=en_US.UTF-8


2. LANG和LC_*的取值中,“C”和“POSIX”分别代表什么?

    LANG没有缺省值,根据文档相当于取值是“C”。LC_*的缺省值是“POSIX”。

    具体他们代表什么,目前我没有找到明确的答案,好像就代表en_US.ISO8859-1。


3. LANG和LC_ALL应该进行全局设置还是单用户设置?

    对于我的配置LC_ALL=en_US.UTF-8,我认为可以作为全局设置,因为从功能上说,这可以作为所有用户的通用要求。

    如果对于资料上说的LC_CTYPE=zh_CN.UTF-8,就应该作为单用户的设置。


4. 如果全局设置,在哪里添加对LC_ALL的赋值?

    对于gentoo系统,根据资料,应该将对LC_ALL的赋值放在/etc/env.d/10lang中。

    注意需要执行env-update并重新登录后该配置才能生效。


5. 如果单用户设置,在哪里添加对LC_ALL的赋值?

    必须在~/.bash_profile中添加export命令对LC_ALL赋值。






原创粉丝点击