很多人问这个问题, 觉得有必要单独写出来
[2011-11-27制做deb包]本软件的作用:
1* 修正fcitx输入法状态条乱码的问题代码: 全选
fcitx-patch --auto
2* 修正用gedit打开gb2312编码的文件会乱码的问题
说明:
如果安装完本软件,用 gedit 打开gb2312编码文件仍出现乱码, 请退出图形界面, 重新登陆即可见效;
其它参数TODO:代码: 全选
user@ubuntu:~/.gconf/apps/gedit-2/preferences$ fcitx-patch -h Usage: /usr/local/bin/fcitx-patch [OPTION] a patch tool for fixing bad enconding of fcitx Chinese input method , fix gedit to support Chinese GB2312/GBK/GB18030 encondings well, and some extra commands for zhcon. -a, --auto equals [ --wqy-mircohei ], recommended(推荐)* -b, --backup backup ~/.fcitx/config to ~/.fcitx/config.orig --wqy-mircohei set Chinese display font to WenQuanYi Micro Hei(文泉驿微米黑) --wqy-zenhei set Chinese display font to WenQuanYi Zen Hei(文泉驿正黑) --nsimsun set Chinese display font to NSimsun(新宋体) --cp-nsimsun copy NSimsun font from Windows C:\WINDOWS\Fonts\simsun.ttc -r, --reset reset default fcitx settings (equals remove file ~/.fcitx/config) --wbpy, --only-wb-pinyin set Wubi, Pinyin, and Smart-Wubi-Pinyin valid only, by replacing /usr/share/fcitx/data/tables.conf (root please) --add-en-us add LOCALE en_US (root please) -v, --version print the version information and exit -h, --help print this message and exit Please report bugs to Careone <careone@139.com>.
暂未编写 man 文档, 精力有限, 稍后会整理;
原理及细节见后面的说明
一, fcitx输入法状态条乱码/config配置文件乱码的2个原因:
1. fcitx的配置文件是GB2312编码,而linux是用utf-8编码。
如果要修改 /home/xxx/.fcitx/config 配置文件,请指定文件编码为gb2312,否则会乱码或者是修改一个gedit的配置文件(本配置文件%gconf.xml仅对当前用户有效)代码: 全选
gedit --encoding=gb2312 ~/.fcitx/config
~/.gconf/apps/gedit-2/preferences/encodings/%gconf.xml
默认情况下上面的 encodings目录和下面的%gconf.xml文件都是不存在的修改后的%gconf.xml文件内容如下代码: 全选
mkdir -vp ~/.gconf/apps/gedit-2/preferences/encodings gedit ~/.gconf/apps/gedit-2/preferences/encodings/%gconf.xml
上面"shown_in_menu" 的作用是: 在另存为时,可以指定文件编码utf-8/gb2312等;代码: 全选
<?xml version="1.0"?> <gconf> <entry name="shown_in_menu" mtime="1321765642" type="list" ltype="string"> <li type="string"> <stringvalue>UTF-8</stringvalue> </li> <li type="string"> <stringvalue>GB18030</stringvalue> </li> <li type="string"> <stringvalue>GBK</stringvalue> </li> <li type="string"> <stringvalue>GB2312</stringvalue> </li> <li type="string"> <stringvalue>ISO-8859-15</stringvalue> </li> </entry> <entry name="auto_detected" mtime="1321764092" type="list" ltype="string"> <li type="string"> <stringvalue>UTF-8</stringvalue> </li> <li type="string"> <stringvalue>GB18030</stringvalue> </li> <li type="string"> <stringvalue>GBK</stringvalue> </li> <li type="string"> <stringvalue>GB2312</stringvalue> </li> <li type="string"> <stringvalue>CURRENT</stringvalue> </li> <li type="string"> <stringvalue>ISO-8859-15</stringvalue> </li> <li type="string"> <stringvalue>UTF-16</stringvalue> </li> </entry> </gconf>
"auto_detected"的作用是: 打开文件时,自动检测编码
改文件的效果,和某些贴子里说的效果相同运行gconf-editor, 再展开“/apps/gedit-2/preferences/encodings/”
编辑右侧的“auto_detected”将“GB18030”添加到最顶上。
如果想要对系统全部用户生效, 需要修改另外一个文件:这个文件默认情况下内容为空, 或者不存在代码: 全选
sudo gedit /etc/gconf/gconf.xml.defaults/%gconf-tree.xml
把文件内容改为如下(与上面提到的%gconf.xml 个人配置文件略有不同,多了 <dir>及相应标签)具体原理可参考 gconf-editor 帮助信息中的代码: 全选
<?xml version="1.0"?> <gconf> <dir name="apps"> <dir name="gedit-2"> <dir name="preferences"> <dir name="encodings"> <entry name="shown_in_menu" mtime="1322489923" type="list" ltype="string"> <li type="string"> <stringvalue>UTF-8</stringvalue> </li> <li type="string"> <stringvalue>GB18030</stringvalue> </li> <li type="string"> <stringvalue>GBK</stringvalue> </li> <li type="string"> <stringvalue>GB2312</stringvalue> </li> <li type="string"> <stringvalue>ISO-8859-15</stringvalue> </li> </entry> <entry name="auto_detected" mtime="1322489926" type="list" ltype="string"> <li type="string"> <stringvalue>UTF-8</stringvalue> </li> <li type="string"> <stringvalue>GB18030</stringvalue> </li> <li type="string"> <stringvalue>GBK</stringvalue> </li> <li type="string"> <stringvalue>GB2312</stringvalue> </li> <li type="string"> <stringvalue>CURRENT</stringvalue> </li> <li type="string"> <stringvalue>ISO-8859-15</stringvalue> </li> <li type="string"> <stringvalue>UTF-16</stringvalue> </li> </entry> </dir> </dir> </dir> </dir> </gconf>
或者简单一点, 安装leafpad, 再用leafpad打开中文文件:默认值和强制值设置
* 配置编辑器手册
如果您是位系统管理员,您可以在 GConf 中设置默认值和强制值以影响所有用户。默认值的设置用于当用户没有明确设置的键值,并且用户可以修改它们。强制值的设置总会应用于所有的用户,并且他们无法修改。
您可以使用默认值和强制值窗口来编辑或删除默认值和强制值项。默认值和强制值窗口仅为您显示那些已经设为默认值和强制值的键。您不能使用这些窗口来建立新的默认值或强制值项,而是,您要在设置窗口中将一些项设置为默认值或强制值。
选择文件 ▸ 新建默认值窗口以打开一个默认值窗口。选择文件 ▸ 新建强制值窗口以打开一个强制值窗口。2 (真正的原因在这里)代码: 全选
sudo apt-get install leafpad leafpad ~/.fcitx/config
原/home/xxx/.fcitx/config 配置文件中对中文字体的设置有时会不起作用,所以会在输入法状态条里出现乱码把上面改为[程序]
显示字体(中)=*
显示字体(英)=Courier New上面以 # 号开头的为注释行,不起作用代码: 全选
[程序] 显示字体(中)=WenQuanYi Micro Hei #显示字体(中)=WenQuanYi Zen Hei #显示字体(中)=NSimsun 显示字体(英)=Courier New
WenQuanYi Microhei = 文泉驿微米黑
WenQuanYi Zen Hei = 文泉驿正黑
Nsimsun = 宋体(windows 下字体文件为: c:\WINDOWS\Fonts\simsun.ttc)
一般ubuntu默认都有安装"文泉驿微米黑" 字体
如果实在没有,运行下面的命令来安装字体代码: 全选
sudo apt-get install ttf-wqy-microhei ttf-wqy-zenhei
二, windows里fat32分区中文文件名乱码的解决
windows里fat32分区中文文件名乱码, 可以在mount时加入必要的参数:上面utf8=1的作用是不会乱码,uid=1000,dmask=0077的作用是普通用户都可以代码: 全选
sudo mount -t vfat -o utf8=1,uid=1000,dmask=0077 /dev/sda5 /media/wind
创建和修改fat32分区的文件
有一定基础的用户,可以参考下面的写法修改/etc/fstab文件(下面共3行)代码: 全选
/dev/sda1 /media/winc ntfs noauto,rw,users 0 0 /dev/sda5 /media/wind vfat noauto,rw,users,nosuid,nodev,uhelper=udisks,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,flush 0 0 /media/wind/lucid-alternate-i386.iso /media/iso01 iso9660 noauto,loop 0 0
*** 稍后会考虑做一个 fcitx-patch-zh-cn.deb 补丁包, 顺便写个简单的man页面, 把乱码的问题和解决方法写上