LinuxSir.cn,穿越时空的Linuxsir!

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

文件名使用utf-8??

[复制链接]
发表于 2005-7-14 23:38:40 | 显示全部楼层 |阅读模式
locale改为了zh_CN.utf-8,同时设置了G_FILENAME_ENCODING=@GBK,此时新建或更改的文件名都成了cp936的编码,而非utf-8;
若不设置G_FILENAME_ENCODING=@GBK,此时新建或更改的文件名才会是utf-8编码,但这样就没法显示非utf-8的文件名。

请问怎么才能在使用G_FILENAME_ENCODING=@GBK的同时,使新建或更改的文件名使用utf-8编码?

thx
发表于 2005-7-15 10:08:12 | 显示全部楼层
不过,我发现  gftp  在 LANG=zh_CN的环境下,不管本地的文件名是utf8,还是gbk,都能正确显示
回复 支持 反对

使用道具 举报

发表于 2005-7-15 13:07:07 | 显示全部楼层
在 UTF-8 下可以把原先 GBK 的文件名转码

安装:
apt-get install convmv
转码:
convmv -f cp936 -t utf8 --notest -r  /home


注意 ,  Win 分区的不要转
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-15 14:04:38 | 显示全部楼层
Post by jhuangjiahua
在 UTF-8 下可以把原先 GBK 的文件名转码

安装:
apt-get install convmv
转码:
convmv -f cp936 -t utf8 --notest -r  /home


注意 ,  Win 分区的不要转


这个只是将以前的非utf-8转成utf-8,再说win下的还不能转,mount上win分区还是不能正确显示中文文件名。不能解决前面的问题
回复 支持 反对

使用道具 举报

发表于 2005-7-15 14:39:43 | 显示全部楼层
???? 别搞错了
不要转  跟  不能转  哪是一回事

挂载 Win 分区的时候加上 iocharset=utf8 就可以了

比如 /etc/fstab 里用类似
/dev/hda1 /win/c  ntfs   auto,user,nls=utf8,umask=0 0 0
/dev/hda5  /win/d  vfat   auto,user,utf8,umask=0 0 0

或 手工 mount 用
mount /dev/hda1 /win/c -t ntfs -o nls=utf8,umask=0
mount /dev/hda5 /win/c -t ntfs -o utf8,umask=0


( 可以统一用 iocharset=utf8,      

如 mount /dev/hda1 /win/c -t ntfs -o iocharset=utf8,umask=0

或  vfat 分区用 utf8,     NTFS 分区用 nls=utf8)

fat 文件系统的文件名就是用 utf8 编码的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-15 15:07:59 | 显示全部楼层
现在的问题不是文件名编码相互转换的问题,而是不同编码形式文件名混用的问题。我的机器上都设置为使用utf-8,但共享的别人的文件不一定是utf-8。
为了能够方便的使用这些非utf-8的文件,所以设置了G_FILENAME_ENCODING=@GBK,却导致本机所有新建/更改的文件名都成了cp936。
使用convmv转换可以用,但与他人共享文件时总是转来转去,太麻烦了吧
回复 支持 反对

使用道具 举报

发表于 2005-7-15 18:10:39 | 显示全部楼层
Post by jhuangjiahua
???? 别搞错了
不要转  跟  不能转  哪是一回事

挂载 Win 分区的时候加上 iocharset=utf8 就可以了

比如 /etc/fstab 里用类似
/dev/hda1 /win/c  ntfs   auto,user,nls=utf8,umask=0 0 0
/dev/hda5  /win/d  vfat   auto,user,utf8,umask=0 0 0

或 手工 mount 用
mount /dev/hda1 /win/c -t ntfs -o nls=utf8,umask=0
mount /dev/hda5 /win/c -t ntfs -o utf8,umask=0


( 可以统一用 iocharset=utf8,      

如 mount /dev/hda1 /win/c -t ntfs -o iocharset=utf8,umask=0

或  vfat 分区用 utf8,     NTFS 分区用 nls=utf8)

fat 文件系统的文件名就是用 utf8 编码的



难怪改utf-8后mount用cp936会显示乱码,现在知道了
回复 支持 反对

使用道具 举报

发表于 2005-7-15 23:08:31 | 显示全部楼层
sigh, 在 linux 底下编码真麻烦, 尤其是经常要和 win 用户交换文件的时候, 最后还是要回到 gb2312
回复 支持 反对

使用道具 举报

发表于 2006-7-10 21:45:56 | 显示全部楼层
utf8是趋势!
回复 支持 反对

使用道具 举报

发表于 2006-7-11 12:58:48 | 显示全部楼层
Post by gulfstream
现在的问题不是文件名编码相互转换的问题,而是不同编码形式文件名混用的问题。我的机器上都设置为使用utf-8,但共享的别人的文件不一定是utf-8。
为了能够方便的使用这些非utf-8的文件,所以设置了G_FILENAME_ENCODING=@GBK,却导致本机所有新建/更改的文件名都成了cp936。
使用convmv转换可以用,但与他人共享文件时总是转来转去,太麻烦了吧


统一用utf-8是可行的
mount 的时候,iocharset参数设置的是你显示输出用的编码,跟底层文件系统存储的编码不是一回事,所以设置成你控制台采用的编码即可。在文件系统中采用本地字符集的系统并不多,只有跟m$有关的一些老文件系统需要配置codepage,比如在mount samba共享(或者windows网上邻居)时,需要在服务器端配置dos_char参数为cp936,并在客户端配置codepage=cp936,iocharset=utf-8
基本上转换关系是这样:

文件系统编码<---codepage---->内部unicode表示<-----iocharset(nls)----->显示输出

如果文件系统直接用unicode编码(新的文件系统大都如此,比如NTFS,vfat存储长文件名也是采用unicode),则前一个转换可以免除
回复 支持 反对

使用道具 举报

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

本版积分规则

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