LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1458|回复: 9

大家的locale是怎么设的?怎么处理不同的文件名编码问题?

[复制链接]
发表于 2005-5-14 14:24:31 | 显示全部楼层 |阅读模式
我现在locale是这样的:
LANG=zh_CN
LC_CTYPE="zh_CN"
LC_NUMERIC="zh_CN"
LC_TIME="zh_CN"
LC_COLLATE="zh_CN"
LC_MONETARY="zh_CN"
LC_MESSAGES="zh_CN"
LC_PAPER="zh_CN"
LC_NAME="zh_CN"
LC_ADDRESS="zh_CN"
LC_TELEPHONE="zh_CN"
LC_MEASUREMENT="zh_CN"
LC_IDENTIFICATION="zh_CN"
LC_ALL=

我的"zh_CN"好像是和"zh_CN.gb2312"是一样的。

Gnome对文件名的编码好像是用的UTF-8。gedit对文件的默认编码也是UTF-8。在"zh_CN"的locale下UTF-8的文件名在终端下是问号,文件内容是乱码。我把locale改成"zh_CN.UTF-8"或"UTF-8"都不行,UTF-8的文件名都是问号。Locale要怎么设才是UTF-8?
vi打开UTF-8编码的文件是乱码,set encoding=utf-8也不行。而且set encoding=utf-8后vi的界面也变乱了,也不能输入汉字。export LC_ALL="zh_CN.UTF-8",再在vi里set encoding=utf-8也还是乱码。]vi要怎么设才能编辑UTF-8编码的文件,同时还要能输入汉字,界面也保持中文。
从终端建立的文件和文件名在Gnome里可以正常显示,在rox里也可以正确显示,但提示不正确的UTF-8。就是说在终端下用的是GB2312的编码,Gnome和rox用UTF-8,建立的文件名在终端下是问号。在Gnome的打开文件对话框中只有UTF-8编码的文件名才可以正确显示(指汉字),GB2312编码的文件名虽然在Nautilus中可以正确显示,但在打开文件对话框中显示为编码(反斜线和数字)。用firefox保存的文件都是gb2312编码,所在在终端下可以正确显示,在Nautilus和rox也可以正确显示,但rox提示错误的UTF-8(因为不是UTF-8,是GB2312)。在Gnome的打开文件对话框中显示为编码。但在firefox的打开对话框中gb2312显示正常,UTF-8为乱码。那怎么才能让firefox用UTF-8编码文件名呢?
我现在mount的参数为:iocharset=cp936,如里向vfat分区写入UTF-8编码的文件名,在win下就是乱码。如果改为iocharset=utf8,用Nautilus或rox新建目录(UTF-8),在Win下显示正常。
所以我想把locale设为utf8,但不知道怎么设,locale设为utf8后vim的编码是否也会变以utf8,还有怎么使firefox用UTF-8保存文件(文件内容无所谓,因为可以转换编码,关键是文件名)。

大家的locale是怎么设的?怎么处理不同的文件名编码问题?

写的有点乱,不知道能不能看得明白?

补充一点:zhcon是不是不支持utf8,那utf8的locale在终端下怎么办?用什么显示中文?
发表于 2005-5-14 15:21:28 | 显示全部楼层
和我早些时候一样,想破了头都不明白是怎么回事
当务之急,是用 locale 命令看看自己的环境究竟是什么
文件名乱码,是因为你混用了两种编码
vi 的问题,可以用  set fileencodings 而不是 set encoding,并且必须在打开文件之前做
你的系统是什么,有没有 G_BROKEN_FILENAME 这些变量定义?


另外, 你说得真的很混乱。fedora/redhat 系统的话,修改 locale 在 /etc/sysconfig/i18n 和 $HOME/.i18n,并且 LANG=zh_CN.UTF-8 就足够了
回复 支持 反对

使用道具 举报

发表于 2005-5-14 15:32:53 | 显示全部楼层
zh_CN 确实是 zh_CN.GB2312
但是还是用 zh_CN.UTF-8 比较好,有朝一日用到其他语种的时候,文件名和内容就不需要特别的转换了
终端下不能用 zhcon,可以用 cce2k 或者 bterm

1. 设置 locale,确定自己用的是 zh_CN.UTF-8,如果是 debian 还要确定自己的系统中生成了这个 locale
2. 设置挂载选项,对于 vfat,必须使用 -o utf8 来挂载,不然看到的就是 问号
3. 用 vi 打开文件之前,set fileencodings= 设置为文件的编码。这样可以编辑各种编码的文件。
也可以考虑用 iconv 把所有文件转换为 utf8,那样就不必再做反复的设置,但是在 windows 下面只能用支持 utf8 的记事本打开。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-14 16:30:41 | 显示全部楼层
谢谢版主!

dpkg-reconfigure locales 选了所有以en和zh开头的,选择默认为zh_CN.UTF-8。

终端下locale:
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=

但Gnome终端的locale是这样的:
LANG=zh_CN
LC_CTYPE="zh_CN"
LC_NUMERIC="zh_CN"
LC_TIME="zh_CN"
LC_COLLATE="zh_CN"
LC_MONETARY="zh_CN"
LC_MESSAGES="zh_CN"
LC_PAPER="zh_CN"
LC_NAME="zh_CN"
LC_ADDRESS="zh_CN"
LC_TELEPHONE="zh_CN"
LC_MEASUREMENT="zh_CN"
LC_IDENTIFICATION="zh_CN"
LC_ALL=

我不知道这个是在哪里设的。

/etc/fstab是这样的:
# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
/dev/hda15      /               ext3    defaults,errors=remount-ro 0       1
/dev/hda13      /boot           ext3    defaults        0       2
/dev/hda14      /home           ext3    defaults        0       2
/dev/hda16      /var            ext3    defaults        0       2
/dev/hda12      none            swap    sw              0       0
/dev/hdc        /media/cdrom0   iso9660 ro,user,noauto  0       0
/dev/fd0        /media/floppy0  auto    rw,user,noauto  0       0
/dev/hda1       /mnt/win98      vfat    iocharset=utf8,umask=000 0        0
/dev/hda5       /mnt/winxp      vfat    iocharset=utf8,umask=000 0      0
/dev/hda7       /mnt/programs          vfat    iocharset=utf8,umask=000 0  0
/dev/hda9       /mnt/mydir          vfat    iocharset=utf8,umask=000 0        0
/dev/hda10       /mnt/var1          vfat    iocharset=utf8,umask=000 0        0
/dev/hda11      /mnt/var2          vfat    iocharset=utf8,umask=000 0        0
/dev/hda8       /mnt/backup     ntfs    iocharset=utf8,noauto,umask=022 0     0

在源里没找到cce2k和bterm,倒有个jfbterm,可以显示UTF-8的文件名,在终端下(locale是zh_CN.UTF-8)用more和vi直接就可以显示UTF-8的文件,不过GB2312的文件是乱码,不清楚set fileencoding怎么用。在jfbterm下LANG="zh_CN.GB2312"vi显示Win下的文件也还是乱码。也不清楚G_BROKEN_FILENAME怎么用。另外jfbterm好像没有输入法。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-14 16:42:58 | 显示全部楼层
在Gnome下可以同时正确显示UTF-8和GB2312的文件名,但在终端下两者好像不能同时正确显示。但有些程序如firefox保存文件时文件名是用的GB2312的编码,就会导致在终端下乱码。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-14 18:00:27 | 显示全部楼层
我在~/.vimrc中加了下面一行:
set fileencodings=ucs-bom,utf-8,enc-cn,gb2312,big5,latin1
现在vi可以自动识别utf8和gb2312的文件了。
实在不行我可以:edit ++enc=gb2312 xxx.txt强制设置编码为gb2312。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-14 19:05:26 | 显示全部楼层
apt-get install cce  花屏
Fatal error: Terminatedse: No such file ......

网上cce 的资料好少!
回复 支持 反对

使用道具 举报

发表于 2005-5-14 19:58:55 | 显示全部楼层
Post by noright
apt-get install cce  花屏
Fatal error: Terminatedse: No such file ......

网上cce 的资料好少!

现在问题就清楚多了,你的 gnome 环境不知道怎么回事全用的 zh_CN 也就是 GB2312
也就是说只有 startx 之后才是这样
也就是说你在启动输入法之前设置了 LC_*,导致了混乱
不过塞翁失马,你的 vim 设置又多了一两句好用的
最后 debian 的那个 cce 补丁确实太老了,你看看 fedora 里面那个能不能用,用 alien 转一下。到 fedora 版置顶精华帖里面去找
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-14 21:04:14 | 显示全部楼层
原来在小企鹅输入法的启动脚本中有这么一句:export LANG="zh_CN"。要不是版主提醒我还真找不到。不知道加这一句有什么用,我去掉这一句后变UTF-8小企鹅也照样用啊!!!

LANG="zh_CN.UTF-8"后用firefox保存的文件文件名也是UTF-8了。但文件内容是GB2312,不过这就不要紧了。

以前在rox中可以正常显示的GB2312的文件名(红色)现在都是乱码了,不过文件不多,手工改一下吧。

就剩下CCE了,这个解决不了终端就不能用了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-5-15 12:30:16 | 显示全部楼层
终于用上了CCE,感觉还不错。在此多谢limon兄弟!
http://www.linuxsir.cn/bbs/showthread.php?p=1152264#post1152264
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表