Linux 下windows分区中文本乱码问题的解决(gnome)

本文基于Fedora16,可以适用于ubuntu等多个发行版本

出现这个问题的主要原因是windows下的默认文件编码格式和部分Linux默认的文本编码格式不同导致。

在WINDOWS下,文本文件的中文默认编码是GB18030(或者GB2312,当你在保存的时候选择ascii编码时),当然也可以选择utf-8的编码(在保存的时候选择unicode)。
在早期的时候(大概是fedora12以前吧),fedora默认的中文编码格式是GB18030的,后来的版本采用了UTF-8的默认编码格式,所以在vim,gedit的默认检测编码中就只有UTF-8,ISO-8859-1 等所以无法自动检测到 GB2312,GBK,GB18030等字符编码。

首先检查你的linux所使用的文件编码格式:

echo $LANG

如果看到  zh_CN.UTF-8   那么恭喜你,你应该继续看下去,如果是GB系列的那么你应该和windows不会有什么乱码,当然如果有的话你可以继续看下去

首先需要注意的是:如果你的windows分区是手动挂载的,你最好在挂载的时候使用选项 -o iocharset=utf8 这里的utf8 和你Linux的默认编码保持一致,如果是自动挂载的话一般不需要操心

mount -t ntfs -o iocharset=utf8 /dev/sda5 /mnt/wintools/

然后我们需要设置我们的文本编辑软件可以自动的文件的识别编码格式,在linux下我常用的有vim和gedit(kwrite的识别能力不错可以不用设置,用KDE桌面的用户有福啊)

1.配置vim自动识别GB系列的编码:
1)用vim编辑vim的配置文件,一般是/etc/vimrc
vim /etc/vimrc
2) 查找set fileencoding
/set fileencoding
我的就在第一行找到了如下:

if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
    set fileencodings=ucs-bom,utf-8
endif

在set fileencoding后面补上我们需要识别的文字编码,补完之后应该是下面这样:

if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
   set fileencodings=ucs-bom,utf-8,gb2312,gbk,gb18030
endif

好了 保存退出,再用vim打开gb18300编码的文件就可以直接识别了

2.配置gedit可以自动的识别GB中文编码,gedit分为两种情况:一种是gedit2系列的,一种是gedit 3系列的,适合gnome的主版本号所对应的,我使用的fedora16 使用的是gnome3所以我的gedit版本是3.2.6
如果是gedit2的话可以用如下命令设置:

gconftool-2 -s /apps/gedit-3/preferences/encodings/auto_detected --type=list --list-type=string '[UTF-8,CURRENT,GB2312,GB18030,GBK,UTF-16]'

如果是gedit3的话可以如下命令设置:

gsettings set org.gnome.gedit.preferences.encodings auto-detected "['UTF-8','GB18030','GB2312','GBK','BIG5','CURRENT','UTF-16']"

OK设置完成之后在用Gedit打开GB编码的中文文件的时候就不会乱码了

 

TIPS:  如果不方便修改gedit的自动检测列表也可以手动指定文件的编码格式,在gedit中选择  文件—>打开 然后在左下角手动选择编码格式,如果列表里面没有就选择最下面的添加或删除选项 手动的添加编码格式

参考资料:

http://crunchbanglinux.org/forums/topic/6596/how-to-make-gedit-autodetect-sjis-japanese-encoding/

http://wiki.ubuntu.org.cn/Gedit%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81

此条目发表在linux分类目录。将固定链接加入收藏夹。