LinuxSir.cn,穿越时空的Linuxsir!

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

Slackware current中scim输入法问题以及filezilla和aMule乱码问题

[复制链接]
发表于 2008-3-3 00:15:25 | 显示全部楼层 |阅读模式
作者: forever steel(zhoun)
原发: http://guo9310.blog.163.com/

一. Slackware-current中scim输入法问题

Slackware-current中引入了scim作为默认输入法, 我原来一直使用fcitx,
所以并没有装scim*的几个包.
我前几天更新了gtk2+之后, 发现使用gvim的时候, 总是提示说找不到scim的一些库,
我就把scim装上了, 装上之后感觉还是不太稳定, 有很多问题的.

我的locale设置是zh_CN.GBK, scim 跟一些程序有冲突, 如wine, pidgin等.
1. wine中根本无法输入中文,
2. pidgin中经常会出现输入法候选字不显示问题,
3. vim中, 输入"mingf"这个词, 就出现一长串乱码

二. 修改locale, 从zh_CN.GBK改成zh_CN.UTF-8

scim推荐使用UTF-8, 我把locale改成zh_CN.UTF-8
1. wine中, 用fcitx输入中文
.profile中, 加入这两行:

  1. unset QT_IM_MODULE
  2. unset XIM_PROGRAM
复制代码


2. pidgin中, locale改之后没有试过, 有时间再试试看

3. vim的那个问题就好了, 没有这个一长串乱码问题了

改locale的步骤
1. 在.profile中

  1. export LANG=zh_CN.UTF-8
  2. export XMODIFIERS="@im=fcitx"
  3. export G_FILENAME_ENCODING="@locale"
复制代码


2. 这个改locale还是没有那么简单的, 还有两个麻烦的地方
一是中文文件名, 二是gbk编码的文本文件
中文文件名可以用工具转换, 好像Magic Linux的wiki上也给出了一个方案, 用convmv处理一下
下面说说我的做法, 就是用ntfs分区做了一个编码转换:
1) 未换locale之前,  locale=zh_CN.GBK的时候, 把ntfs的分区用 locale=zh_CN.GBK挂载

  1. mount -t ntfs-3g -o locale=zh_CN.GBK /dev/sda3 /mnt/e
复制代码

2) 把ext3上包含中文文件名的目录用cp -pR复制或者用rsync同步到ntfs分区
3) umount ntfs分区
4) 修改.profile, locale=zh_CN.UTF-8, 重新登录
5) 把ntfs的分区用 locale=zh_CN.UTF-8挂载

  1. mount -t ntfs-3g -o locale=zh_CN.UTF-8 /dev/sda3 /mnt/e
复制代码

6) 把ntfs分区上刚才备份的那些包含中文文件名的目录, 再复制或者同步回来就好了

3. 对于内容为gbk编码的文本文件, 可以用iconv转换一下就可以了
我这里这种文件不多, 写了一个脚本来处理

  1. #!/bin/bash
  2. #iconv_all convert the files from gbk to utf8
  3. #usage: iconv_all *.txt
  4. for f in $@
  5. do
  6. if [ -f $f ]
  7. then
  8. mv "$f" "$f.bak1"
  9. iconv -c -f gbk -t utf8 < "$f.bak1" > "$f"
  10. rm "$f.bak1"
  11. fi
  12. done
  13. exit 0
复制代码


三. Linux下面的电骡软件

1. mldonkey
很方便, 有一个服务器,客户端, Web UI, 可以远程登录, 支持telnet, http等, 很强悍,
试了一下web页面, 非常方便, 配置之类的也一目了然, 没有乱码问题
支持多种协议

感觉不爽的一点是edonkey模块不支持upnp, 只有bt模块支持,
造成edonkey只能得到lowid, 获取不到highid, 只能通过在无线路由器上设置端口映射来解决,
如果你使用随机端口, 每次设置太麻烦.

2. aMule
跟eMule界面和功能很象, 我自己比较习惯
而且aMule支持upnp功能, 可以不用设置端口映射就得到highid, 方便.

根据aMule wiki上的说明, 把我eMule里面的一些数据导入到aMule中,
其实我就是看看两个config目录, 有哪些文件名一样, 直接复制过来覆盖一下

四. aMule乱码问题

这次改locale=zh_CN.UTF-8, 也是因为想使用aMule,
但这个aMule的搜索出来的文件名, 和下载的文件名都是乱码

搜索出来的文件名乱码, 把locale=zh_CN.UTF-8, 就好了,
但是那个下载的文件名乱码问题, 设置locale也没有用.

http://shuizhuyuanluo.blog.163.c ... 181200711104826621/
有位nihui大侠写了一个patch, 打了这个patch就好了, (这个patch应该提交给aMule开发组 )
我从Magic Linux的apt源中, 找到了aMule的源代码rpm包, 解压之后找到了这个patch
amule-cvs-convfilenames-gb18030.patch
下载了aMule的0205的svn版本, 打上补丁之后, 重新安装就没有问题了.

新加入的文件名都是对的了, 在patch安装之前的老的那些文件名,
如果是未下完文件, 可以通过传输文件->右键点击->文件信息,然后把正确的中文文件名填入
如果是已经下载完成文件, 可以通过共享文件 -> 右键点击 ->更名 来修改

下面就是那个patch文件, 感谢Magic Linux的nihui大侠提供了这个patch


  1. diff -u -r amule-cvs/src/libs/common/Path.cpp amule-cvs.new/src/libs/common/Path.cpp
  2. --- amule-cvs/src/libs/common/Path.cpp  2008-02-01 03:55:31.000000000 +0800
  3. +++ amule-cvs.new/src/libs/common/Path.cpp      2008-02-05 22:38:09.000000000 +0800
  4. @@ -176,7 +176,7 @@
  5.         // Try to unmangle the filename for printing.
  6.         m_printable = wxConvUTF8.cMB2WC(fn);
  7.         if (!m_printable) {
  8. -               m_printable = wxConvISO8859_1.cMB2WC(fn);
  9. +               m_printable = wxConvLocal.cMB2WC(fn);
  10.         }

  11.         wxASSERT(IsOk());
  12. diff -u -r amule-cvs/src/SafeFile.cpp amule-cvs.new/src/SafeFile.cpp
  13. --- amule-cvs/src/SafeFile.cpp  2008-01-28 04:32:36.000000000 +0800
  14. +++ amule-cvs.new/src/SafeFile.cpp      2008-02-05 22:39:02.000000000 +0800
  15. @@ -241,11 +241,11 @@
  16.                 str = UTF82unicode(val);
  17.                 if (str.IsEmpty()) {
  18.                         // Fallback to Latin-1
  19. -                       str = wxString(val, wxConvISO8859_1, raw_len);
  20. +                       str = wxString(val, wxConvLocal, raw_len);
  21.                 }
  22.         } else {
  23.                 // Raw strings are written as Latin-1 (see CFileDataIO::WriteStringCore)
  24. -               str = wxString(val, wxConvISO8859_1, raw_len);
  25. +               str = wxString(val, wxConvLocal, raw_len);
  26.         }

  27.         return str;
  28. @@ -323,7 +323,7 @@
  29.                 }
  30.                 default: {
  31.                         // Raw strings are saved as Latin-1
  32. -                       wxCharBuffer s1 = wxConvISO8859_1.cWC2MB(str);
  33. +                       wxCharBuffer s1 = wxConvLocal.cWC2MB(str);
  34.                         WriteStringCore(s1, utf8strNone, SizeLen);
  35.                 }
  36.         }
复制代码


五. filezilla的乱码问题
1. 服务器端乱码, 搜索一下这个比较多见, 解释的也很清楚, 在站点管理器中改一下该站点的默认编码就好了.

作者自FileZilla Server V0.9.15开始(及相应的client版本),按RFC 2610 http://www.faqs.org/rfcs/rfc2640.html 规定的方式,默认使用UTF-8。而其他服务器和客户端并不用此标准。即,server和client对话时,Filezilla产品一上来就用UTF-8,除非对方大喊一声UTF8 OFF;而其他的ftp产品则多数先用本地编码对话,除非对方说一声UTF8 ON。所以,Filezilla和其他软件对话时,就出现了一个讲UTF8,一个用本地编码,而大家都未沟通UTF8到底是on还是off,所以:乱码!
  参见:http://blog.sina.com.cn/u/46dac66f010005lz

2. 本地文件夹乱码, 显示一个字好像4个unicode编码一样,
这个问题就奇怪了, 以前好像是好的啊, 不知道什么时候变成这样的,也搜索不到解决方案,
后来我偶尔在设置-> 语言里面, 把简体中文改成了系统默认, 就好了! 晕倒! 原因也不知道, 反正现在好了!

斗争了一天的输入法和乱码问题, 记录下来, 给大家分享一下, 有同样问题的人可以少折腾一下
发表于 2008-3-3 08:48:05 | 显示全部楼层
我一直使用UTF-8的locale,乱码的问题很少碰到.
Scim我使用过程中也不错,也没有什么无法忍受的问题,以前我使用的也是fcitx,注销掉fcitx的设置,Scim也没有设置,只是加了自启动而已,唯一不爽的就是内存占用太大了,哈哈!还有一点就是我经常使用gvim,在工具栏点保存时会退出scim,比较麻烦.
http://blog.chinaunix.net/u1/55011/showart_479805.html
回复 支持 反对

使用道具 举报

发表于 2008-3-4 13:48:28 | 显示全部楼层
current 里的scim包在/etc/profile.d/scim.sh里把输入法变量都配了,
LANG变量在/etc/profile.d/lang.sh


最好不要再在其他地方改变量了,乱七八糟的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-4 17:50:43 | 显示全部楼层
/etc/profile.d里面的脚本是对所有用户起作用,
而且如果升级的话,有可能被覆盖。

如果只改自己的环境变量,不想影响其他人,在.profile里面改很正常的啊。
回复 支持 反对

使用道具 举报

发表于 2008-3-6 17:56:32 | 显示全部楼层
Post by zhoun;1822999
/etc/profile.d里面的脚本是对所有用户起作用,
而且如果升级的话,有可能被覆盖。

如果只改自己的环境变量,不想影响其他人,在.profile里面改很正常的啊。

绝大部分人都不会遇到多人使用同个系统的情况,
多个用户其实都是一个人用的,统一比较方便
尤其是locale,一个用gbk,一个用utf8,会很麻烦的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-6 18:30:48 | 显示全部楼层
Post by eagleisyou;1823827
绝大部分人都不会遇到多人使用同个系统的情况,
多个用户其实都是一个人用的,统一比较方便
尤其是locale,一个用gbk,一个用utf8,会很麻烦的


凡事不要太绝对,我只是给大家说一个比较通用的方法。

你说的在自己的机器上当然没有问题,随便怎么搞。
公司和实验室还有很多服务器,每个服务器上面还有很多用户,
系统管理员不能把自己的意愿强加到别人身上。
回复 支持 反对

使用道具 举报

发表于 2008-3-6 21:50:40 | 显示全部楼层
我的意见是能不改动系统的,绝对不对系统动手脚,宁肯在自己的目录下随便改,有多个用户的情况下,也只是将配置文件复制过去而已,当然单机情况下,你可以随便动,重装系统也要不了多长时间,也许这也能让你对系统多了解一点!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-6 23:33:52 | 显示全部楼层
同意楼上的
回复 支持 反对

使用道具 举报

发表于 2008-3-7 08:17:05 | 显示全部楼层
我也不习惯改系统的,只在.bash_rc里改,当然是在.bash_profile里source .bash_rc。
回复 支持 反对

使用道具 举报

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

本版积分规则

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