fcitx输入法状态条乱码/config配置文件乱码的解决[2011-11-27制做deb包]

系统字体配置、中文显示和输入法问题
回复
头像
careone
帖子: 839
注册时间: 2007-12-17 21:41

fcitx输入法状态条乱码/config配置文件乱码的解决[2011-11-27制做deb包]

#1

帖子 careone » 2011-11-20 11:48

fcitx输入法状态条乱码/config配置文件乱码的解决

很多人问这个问题, 觉得有必要单独写出来
[2011-11-27制做deb包]
fcitx-patch_1.2-1~careone1_all.deb
(8.43 KiB) 已下载 109 次
本软件的作用:

1* 修正fcitx输入法状态条乱码的问题

代码: 全选

fcitx-patch --auto

2* 修正用gedit打开gb2312编码的文件会乱码的问题

说明:
如果安装完本软件,用 gedit 打开gb2312编码文件仍出现乱码, 请退出图形界面, 重新登陆即可见效;


其它参数

代码: 全选

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>.
TODO:
暂未编写 man 文档, 精力有限, 稍后会整理;

原理及细节见后面的说明
一, fcitx输入法状态条乱码/config配置文件乱码的2个原因:

1. fcitx的配置文件是GB2312编码,而linux是用utf-8编码。
如果要修改 /home/xxx/.fcitx/config 配置文件,请指定文件编码为gb2312,否则会乱码

代码: 全选

gedit --encoding=gb2312 ~/.fcitx/config
或者是修改一个gedit的配置文件(本配置文件%gconf.xml仅对当前用户有效)
~/.gconf/apps/gedit-2/preferences/encodings/%gconf.xml
默认情况下上面的 encodings目录和下面的%gconf.xml文件都是不存在的

代码: 全选

mkdir -vp ~/.gconf/apps/gedit-2/preferences/encodings
gedit ~/.gconf/apps/gedit-2/preferences/encodings/%gconf.xml
修改后的%gconf.xml文件内容如下

代码: 全选

<?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>
上面"shown_in_menu" 的作用是: 在另存为时,可以指定文件编码utf-8/gb2312等;
"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>及相应标签)

代码: 全选

<?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>
具体原理可参考 gconf-editor 帮助信息中的
默认值和强制值设置

* 配置编辑器手册

如果您是位系统管理员,您可以在 GConf 中设置默认值和强制值以影响所有用户。默认值的设置用于当用户没有明确设置的键值,并且用户可以修改它们。强制值的设置总会应用于所有的用户,并且他们无法修改。

您可以使用默认值和强制值窗口来编辑或删除默认值和强制值项。默认值和强制值窗口仅为您显示那些已经设为默认值和强制值的键。您不能使用这些窗口来建立新的默认值或强制值项,而是,您要在设置窗口中将一些项设置为默认值或强制值。

选择文件 ▸ 新建默认值窗口以打开一个默认值窗口。选择文件 ▸ 新建强制值窗口以打开一个强制值窗口。
或者简单一点, 安装leafpad, 再用leafpad打开中文文件:

代码: 全选

sudo apt-get install leafpad
leafpad ~/.fcitx/config
2 (真正的原因在这里)
原/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时加入必要的参数:

代码: 全选

sudo mount -t vfat -o utf8=1,uid=1000,dmask=0077 /dev/sda5 /media/wind
上面utf8=1的作用是不会乱码,uid=1000,dmask=0077的作用是普通用户都可以
创建和修改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
三,压缩文件解压后文件名乱码的解决

如果windows下的某些压缩文件中带有中文文件名,或者压缩包里面的文件带中文名,直接在linux图形界面下解压缩可能会乱码,改为在命令行下解压缩就不会乱码

代码: 全选

unrar e aaa.rar
unrar x aaa.rar
(e参数解压缩到当前位置/相对路径,x参数解压缩到完整路径/绝对路径)
如果提示找不到unrar,用下面的命令安装

代码: 全选

sudo apt-get install rar unrar
*** 稍后会考虑做一个 fcitx-patch-zh-cn.deb 补丁包, 顺便写个简单的man页面, 把乱码的问题和解决方法写上
上次由 careone 在 2011-11-29 20:56,总共编辑 4 次。
魁拔不死,天下不宁。
魁拔既死,天下不平。
--------------
Careone <emacslocale^126.com>
https://sourceforge.net/projects/emacslocale/files/
头像
remeber
论坛版主
帖子: 13030
注册时间: 2009-01-06 15:18
来自: 人间

Re: fcitx输入法状态条乱码/config配置文件乱码的解决

#2

帖子 remeber » 2011-11-24 18:52

各種亂碼。。
中文就這麼悲催
“有一种被人抛诸脑后的过去,包含一些不该遗忘的点点滴滴。欢笑之余,我将故旧拾起,才刹见自己的薄情。人世间似乎存在着某种公平,每个人都曾被抛掷在他人的遗忘中;而今你所有哽咽难宣的话语,也正是你曾为人所期盼,却永远听不见的字句。” —赫曼 赫塞
头像
kuangquanshuili
帖子: 57
注册时间: 2011-11-03 17:51

Re: fcitx输入法状态条乱码/config配置文件乱码的解决

#3

帖子 kuangquanshuili » 2011-11-24 21:58

受教了,感谢楼主 :em02
www.3gegg.com、www.paiziwang.com、www.shumeipai.net、www.52bazhong.com
回复