QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 5757|回复: 17

Nautilus 网上邻居中文乱码的问题的解决

[复制链接]
发表于 2003-10-19 18:51:21 | 显示全部楼层 |阅读模式
rh9 用户都知道,Nautilus 文件管理器中输入 smb:// 就可以访问局域网网上邻居,但是进入以后中文文件名是看不到的,显示为“无效的 Unicode”。当然,那些文件名确实不是 utf-8 编码的,而是 GB* 编码。而无论 G_BROKEN_FILENAMES 是否设定,都没有效果。

然而同时,在本地文件系统中的文件,却无论文件名是本地编码,还是 unicode,都可以正常显示,且受  G_BROKEN_FILENAMES 的影响。这让我们大家觉得,是 smb:// 模块不好,导致文件名显示不正常。

可再多试验几次,就会发现这并非 smb:// 独有。如果安装了 nautilus-cd-burner,就会多一个 burn://,拷贝进去本地编码的文件名,同样显示为 “无效的 unicode”。换句话说,本地编码的文件名,除了在本地文件系统外,都无法被显示,且无论 G_BROKEN_FILENAMES 是否设定。

我们打开 nautilus 的源码,在 libnautilus-private/nautilus-file.c 文件的 2396 行,函数 nautilus_file_get_display_name_nocopy() 中,大约的,有以下代码段:

name = nautilus_file_get_name (file);
...
if (has_local_path (file)) {
    ...
    if (broken_filenames || !g_utf8_validate (name, -1, NULL)) {
        utf8_name = g_locale_to_utf8 (name, -1, NULL, NULL, NULL);
        ...

也就是说,只有当该文件是个本地文件时,才会去判断 G_BROKEN_FILENAMES,以及尝试去转换文件名。除此之外的所有其他文件名,只要不是 utf-8 的,统统显示为 “无效的 Unicode”。

我不知道转换工作为什么只对本地文件做,或者说,不知道如果对所有 URI 都进行转换会造成什么问题。所以我把转换的代码挪到了 if (has_local_path (file)) 判断之前。现在,我的 nautilus 可以正常显示网上邻居目录中的本地编码文件名,我也尝试拷贝了几个出来,都没什么问题。

附件中是我的一个贴图。如果你愿意帮忙测试这样更改的效果,请和我联系。警告:造成你文件系统的任何后果我是不负责的;)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2003-10-19 19:22:07 | 显示全部楼层
http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&t=24106&highlight=gnome+nautilus+%B2%B9%B6%A1
回复

使用道具 举报

 楼主| 发表于 2003-10-19 22:57:25 | 显示全部楼层
很高兴看到这个问题已经引起一些重视。我看了这串贴子,由于补丁所补版本与现在可能有差距,我不敢说领悟了它的意思,只是从现在的代码看,这样补是会造成问题的。另外,该贴子最后也没有形成决议。

我的建议,就是1)取消掉

if (has_local_path (file))

判断,使文件名转换对所有文件都有效,而不仅仅是本地文件。

2) 去掉 have_broken_filenames () 的判断,这在这里没用,文件名如果不是 utf-8,就会将其当作 locale encoding 再尝试一次,无论 G_BROKEN_FILENAMES 设没设,这么做都是不会错的

3) 可能会有点争议,就是如果该文件名既非 utf-8,又非 locale encoding,那么它就真的是一个无效的文件名,我建议此时将其当作 ISO-8859-1 编码而转换。这次转换是一定会成功的。此时你会看到它显示为真正的“乱码”字符,就是好像在非中文环境中看到的中文一样,但即使这样它多少也能提供一些信息,总比光的“无效的 Unicode”要好点

这样改完后,nautilus 对任何文件名,都会尝试1)当作 unicode 来显示,2) 如果不行,就当作本地编码(如 GB18030)来显示,3) 如果再不行,就当作拉丁字符来显示(比较不会出现)。无论你的文件名是 utf-8 编码还是 GB2312/GBK/GB18030 编码,在 nautilus 中都将一视同仁

欢迎对我的改法发表意见。稍候我会去实作这些修改,如果有人愿意试用那就更好了
回复

使用道具 举报

发表于 2003-10-20 02:40:19 | 显示全部楼层
我的改法意思和你原来的差不多,在前头加入
                if (!g_utf8_validate (name, -1, NULL))
                        name =g_locale_to_utf8 (name, -1, NULL, NULL, NULL);
不管是否本地文件,全转成utf8

我的改法可能不稳定,譬如如果是big5编码的文件名将强行按locale encoding转成utf8编码显示,很可能引起nautilus崩溃,因此最好还是按照你第三点再次转换显示,但我没试过这样进一步修改,不知道有什么效果(最多是nautilus显示时崩溃,应该不会影响到文件系统的,因为这个只是显示问题,拷贝文件是没问题的)

最新的nautilus还没修正这个??........
靠,都什么时候的事了!.......

[删去发脾气的不当言语若干,昨晚拨号上网,心情特差]
回复

使用道具 举报

发表于 2003-10-20 03:04:19 | 显示全部楼层
就事论事最好
别搞的话里有话似的
回复

使用道具 举报

 楼主| 发表于 2003-10-20 13:00:42 | 显示全部楼层
这样的改法很容易,我稍后就改一下,也会处理转换失败的情况,然后包成 rpm 放出来。

但这事还没完,视图里是显示正常了,可是拷贝文件的进度对话框中还是显示无效文件名。另外还有一个大漏洞,如果你在一个 locale encoding 编码文件名上打开属性对话框,再关闭后,这个文件名就被改成了 utf-8 的了!其实用户并没有想改名,却改掉了。

我一直有订阅 nautilus 的邮件列表,似乎并未看到有人报告这个问题的修正,否则我早就参与讨论了,不知是否是我有疏漏,还是前辈们报告的时机不好,也许该再多报一次?
回复

使用道具 举报

发表于 2003-10-20 15:17:34 | 显示全部楼层
[quote:722fbd5cc4="xLoneStar"]这样的改法很容易,我稍后就改一下,也会处理转换失败的情况,然后包成 rpm 放出来。

但这事还没完,视图里是显示正常了,可是拷贝文件的进度对话框中还是显示无效文件名。另外还有一个大漏洞,如果你在一个 locale encoding 编码文件名上打开属性对话框,再关闭后,这个文件名就被改成了 utf-8 的了!其实用户并没有想改名,却改掉了。

我一直有订阅 nautilus 的邮件列表,似乎并未看到有人报告这个问题的修正,否则我早就参与讨论了,不知是否是我有疏漏,还是前辈们报告的时机不好,也许该再多报一次?[/quote]

当时我也留意到进度提示框的乱码了,不过,一直没找到该下手的地方,你再看看能否修改
你说的打开属性对话框然后关闭的操作我没有试过,可能真有这个问题,你试试能否也一并修改掉,我现在工作环境全是win,用linux时间不多,连测试都成问题

这个乱码问题我最早知道的是在rh8里,当时mozilla版主立即搞了个补丁,效果不错,后来我也改了一下,就是上面的帖子,觉得效果不好,也没有意思去提交

你改好后测试一下,效果好的话提交给nautilus小组试试
回复

使用道具 举报

 楼主| 发表于 2003-10-22 18:17:47 | 显示全部楼层

成果

屏幕截图

本图中所有文件名均为 GB2312 编码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

 楼主| 发表于 2003-10-23 01:33:55 | 显示全部楼层

补丁发表

补丁: nautilus-2.4.1-locale-filename.patch

更改以下行为:

1) 当前编码的文件名,在图标视图和列表视图中,在包括smb:// 在内的所有文件系统中,都能被正常处理显示,而不再是只有本地文件系统才能显示

2) 在拷贝/移动文件进度对话框中,也能正常显示当前编码文件名,而不是仅仅标一个“无效的 Unicode”字样

这样更改后,基本上当前编码文件名将和 utf-8 文件名一起被一视同仁地处理了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

 楼主| 发表于 2003-10-23 12:57:27 | 显示全部楼层
打过此补丁的 rpm 包,我已经做好,位于

http://auvtech.com/~xinzhen/downloads/GNOME/2.4/farm/nautilus/

需要 Gnome 2.4,也可以从我的站上获得。希望遇到过这个问题的朋友测试了后告诉我一下效果
回复

使用道具 举报

发表于 2003-10-25 21:23:18 | 显示全部楼层
怎么用啊,我是新手,不好意思
回复

使用道具 举报

 楼主| 发表于 2003-10-25 23:48:14 | 显示全部楼层
[quote:8777643455="MythologyAge"]怎么用啊,我是新手,不好意思[/quote]

安装上这个 i586.rpm 结尾的包,然后……就行了呀
回复

使用道具 举报

发表于 2003-11-20 01:25:55 | 显示全部楼层
几位高手能否把xfsamba也给改成支持中文文件名的?
还有smb4k解决了中文文件名的问题,但只能用在kde下,还是xfsamba正统些。
回复

使用道具 举报

发表于 2004-5-7 23:08:46 | 显示全部楼层
xfsamba用起来太不习惯了.
回复

使用道具 举报

发表于 2004-5-9 21:55:26 | 显示全部楼层
要求置顶
回复

使用道具 举报

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

本版积分规则

GMT+8, 2024-11-7 01:46 , Processed in 0.098922 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

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