上网搜索Linux中文乱码问题,提示需要安装
fonts-chinese-3.02-12.el5.noarch.rpm
fonts-ISO8859-2-75dpi-1.0-17.1.noarch.rpm
中文语言包
yum安装方式提示找不到,怀疑是网络问题,改用从网站
http://rpmfind.net/linux/rpm2html
下载,使用rpm安装方式
直接安装提示:缺少chkfontpath依赖包
安装依赖chkfontpath提示:
[root@RedHat-BG home]# rpm -ivh chkfontpath-1.10.1-7mdv2011.0.x86_64.rpm
warning: chkfontpath-1.10.1-7mdv2011.0.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 78d019f5: NOKEY
error: Failed dependencies:
xfs is needed by chkfontpath-1.10.1-7mdv2011.0.x86_64
[root@RedHat-BG home]# rpm -ivh xfs-1.1.2-1-mdv2012.0.x86_64.rpm
warning: xfs-1.1.2-1-mdv2012.0.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 26752624: NOKEY
error: Failed dependencies:
rpm-helper is needed by xfs-1.1.2-1.x86_64
fslsfonts is needed by xfs-1.1.2-1.x86_64
fstobdf is needed by xfs-1.1.2-1.x86_64
showfont is needed by xfs-1.1.2-1.x86_64
x11-server-common >= 1.4.0.90-13mdv is needed by xfs-1.1.2-1.x86_64
libxfont >= 1.2.8-2mdv is needed by xfs-1.1.2-1.x86_64
libc.so.6(GLIBC_2.14)(64bit) is needed by xfs-1.1.2-1.x86_64
libc.so.6(GLIBC_2.15)(64bit) is needed by xfs-1.1.2-1.x86_64
上网搜索找到这样一段文字:
安装
/bin/sh is needed by fonts-chinese-3.02-12.el5.noarch
/usr/sbin/chkfontpath is needed by fonts-chinese-3.02-12.el5.noarch
fontconfig is needed by fonts-chinese-3.02-12.el5.noarch
mkfontdir is needed by fonts-chinese-3.02-12.el5.noarch
ttmkfdir >= 3.0.6 is needed by fonts-chinese-3.02-12.el5.noarch
这几个提示你缺少依赖的包
这样再安装依赖包
[root@RedHat-BG home]# rpm -ivh rpm-helper-0.24.17-4.mga6.noarch.rpm
warning: rpm-helper-0.24.17-4.mga6.noarch.rpm: Header V3 RSA/SHA1 Signature, key ID 80420f66: NOKEY
error: Failed dependencies:
perl-base >= 2:5.22.1 is needed by rpm-helper-0.24.17-4.mga6.noarch
systemd-units is needed by rpm-helper-0.24.17-4.mga6.noarch
util-linux >= 2.24-1 is needed by rpm-helper-0.24.17-4.mga6.noarch
You have mail in /var/spool/mail/root
这样就陷入没完没了找依赖,上网搜索其他文章:xfs is needed by
找到:
centos/redhat中文支持安装
软件包,http://pan.baidu.com/s/1qW2TE7i
可能要使用的软件
-
chkfontpath-1.10.1-1.1.i386.rpm
fonts-chinese-3.02-12.el5.noarch.rpm
fonts-ISO8859-2-75dpi-1.0-17.1.noarch.rpm
libFS-1.0.0-3.1.i386.rpm
ttmkfdir-3.0.9-23.el5.i386.rpm
xorg-x11-xfs-1.0.2-4.i386.rpm
其中
fonts-chinese-3.02-12.el5.noarch.rpm
fonts-ISO8859-2-75dpi-1.0-17.1.noarch.rpm
这两个是最主要的。
-
直接安装这两个软件
-
rpm -ivh fonts-chinese-3.02-12.el5.noarch.rpm
rpm -ivh fonts-ISO8859-2-75dpi-1.0-17.1.noarch.rpm
-
但如果你之前没有安装xwindow,可能在安装第一个软件时就会出错,如下图。
-
-
4
-
5
这时,需要安装更多的依赖软件。我们依次安装
rpm -ivh ./libFS-1.0.0-3.1.i386.rpm
rpm -ivh ./ttmkfdir-3.0.9-23.el5.i386.rpm
-
-
6
然后将下面两个软件一起安装,不然会出现循环依赖。
rpm -ivh ./chkfontpath-1.10.1-1.1.i386.rpm ./xorg-x11-xfs-1.0.2-4.i386.rpm
-
-
7
然后再依次安装第二步中的两个软件。
rpm -ivh fonts-chinese-3.02-12.el5.noarch.rpm
rpm -ivh fonts-ISO8859-2-75dpi-1.0-17.1.noarch.rpm
-
8
安装完成之后,重启系统。在登录时可以从最下面,选择桌面系统中显示中文。
-
-
-
-
-
-
-
-
-
9
如果要在命令行终端中显示中文、在xshell中显示、输入中文,则需要修改/etc/sysconfig/i18n文件
修改字体文档
#vi /etc/sysconfig/i18n
将LANG="en_US.UTF-8"SYSFONT="latarcyrheb-sun16"修改原内容为LANG="zh_CN.GB18030"
LANGUAGE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
SUPPORTED="zh_CN.UTF-8:zh_CN:zh:en_US.UTF-8:en_US:en"
SYSFONT="lat0-sun16"
-
-
-
10
-
11
其实还有第二种简单的方法
yum -y groupinstall chinese-support
这样自动安装。
版本问题造成冲突
[root@RedHat-BG home]# rpm -ivh ./libFS-1.0.7-6.fc27.i686.rpm
warning: ./libFS-1.0.7-6.fc27.i686.rpm: Header V3 RSA/SHA256 Signature, key ID f5282ee4: NOKEY
error: Failed dependencies:
libc.so.6(GLIBC_2.15) is needed by libFS-1.0.7-6.fc27.i686
[root@RedHat-BG home]# rpm -ivh glibc-2.17-5.mga3.x86_64.rpm \
> ^C
[root@RedHat-BG home]# rpm -ivh glibc-2.17-5.mga3.x86_64.rpm \
> ^C
[root@RedHat-BG home]# rpm -ivh glibc-2.17-5.mga3.x86_64.rpm
warning: glibc-2.17-5.mga3.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID 80420f66: NOKEY
error: Failed dependencies:
dash-static is needed by glibc-6:2.17-5.mga3.x86_64
/usr/bin/dash.static is needed by glibc-6:2.17-5.mga3.x86_64
prelink < 1:0.4.2-1.20091104.1 conflicts with glibc-6:2.17-5.mga3.x86_64
kernel < 2.6.33 conflicts with glibc-6:2.17-5.mga3.x86_64
[root@RedHat-BG home]# rpm -ivh glibc-2.14.1-11.2.mga2.x86_64.rpm
warning: glibc-2.14.1-11.2.mga2.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID 80420f66: NOKEY
error: Failed dependencies:
dash-static is needed by glibc-6:2.14.1-11.2.mga2.x86_64
/bin/dash.static is needed by glibc-6:2.14.1-11.2.mga2.x86_64
prelink < 1:0.4.2-1.20091104.1 conflicts with glibc-6:2.14.1-11.2.mga2.x86_64
[root@RedHat-BG home]# rpm -ivh dash-static-0.5.9-1.mga6.x86_64.rpm
warning: dash-static-0.5.9-1.mga6.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID 80420f66: NOKEY
Preparing... ########################################### [100%]
1:dash-static ########################################### [100%]
[root@RedHat-BG home]# rpm -ivh glibc-2.14.1-11.2.mga2.x86_64.rpm
warning: glibc-2.14.1-11.2.mga2.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID 80420f66: NOKEY
error: Failed dependencies:
prelink < 1:0.4.2-1.20091104.1 conflicts with glibc-6:2.14.1-11.2.mga2.x86_64
[root@RedHat-BG home]# rpm -ivh ./libFS-1.0.7-6.fc27.i686.rpm
warning: ./libFS-1.0.7-6.fc27.i686.rpm: Header V3 RSA/SHA256 Signature, key ID f5282ee4: NOKEY
error: Failed dependencies:
libc.so.6(GLIBC_2.15) is needed by libFS-1.0.7-6.fc27.i686
[root@RedHat-BG home]# rpm -ivh glibc-2.16.90-3-mdv2012.0.x86_64.rpm
warning: glibc-2.16.90-3-mdv2012.0.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 26752624: NOKEY
error: Failed dependencies:
prelink < 1:0.4.2-1.20091104.1mdv2010.1 conflicts with glibc-6:2.16.90-3.x86_64
[root@RedHat-BG home]# rpm -ivh libc6-2.16.90-3-mdv2012.0.x86_64.rpm
warning: libc6-2.16.90-3-mdv2012.0.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 26752624: NOKEY
error: Failed dependencies:
glibc < 6:2.14.90-13 conflicts with libc6-6:2.16.90-3.x86_64
[root@RedHat-BG home]# rpm -ivh libFS-1.0.7-6.fc27.i686.rpm
warning: libFS-1.0.7-6.fc27.i686.rpm: Header V3 RSA/SHA256 Signature, key ID f5282ee4: NOKEY
error: Failed dependencies:
libc.so.6(GLIBC_2.15) is needed by libFS-1.0.7-6.fc27.i686
冲突问题的搜索:
|
I have a 64-bit Redhat Enterprise Linux server (version 6.3) that doesn't want to let me install the glibc.i686 module for 32-bit compatibility. When I try yum install glibc.i686 as root, it gives me a long string of errors like this:
Transaction Check Error:
file /lib/libc.so.6 from install of glibc-2.12-1.80.el6_3.6.i686 conflicts with file from package libc6-6:2.15-1.x86_64
file /lib/libm.so.6 from install of glibc-2.12-1.80.el6_3.6.i686 conflicts with file from package libc6-6:2.15-1.x86_64
file /lib/libpthread.so.0 from install of glibc-2.12-1.80.el6_3.6.i686 conflicts with file from package libc6-6:2.15-1.x86_64
|
解答:
|
There is no libc6 package in Red Hat Enterprise Linux. The package name for the same files is glibc . It appears that someone installed a package on your server from a different Linux distribution, and overrode the errors they would have received upon attempting to do so (which are just about the same as those you saw here).
This of course puts your RPM database in an inconsistent state relative to the actual software installed, and may cause compatibility and dependency problems such as that you ran into today. It becomes no longer possible to update packages from the supported repositories, for instance, and difficult to determine exactly what code is running on the system.
My best guess is that someone (who really doesn't know the right way to do this) attempted to upgrade glibc beyond the version provided by Red Hat, most likely to take advantage of a new feature which isn't present in the version of glibc shipped with EL6.
The right way, if you really need this late version of glibc, is to take Red Hat's source RPM, tweak the spec file and any patches to build the new version of glibc, and use the new binary RPMs of the new version. You then are responsible for maintaining it yourself, may lose vendor support, etc. so this is something you should only think about if business requirements absolutely demand it. (And since you lose your support anyway, you may as well switch to CentOS...)
|
answered
Jan 24 '13 at 22:25
| |
|
|
解决方法就是不装了
你的电脑上已经有glibc-common-2.5-107.i386
可知冲突和已安装的不同的软件包相互匹配版本有关
降低下载版本:
[root@RedHat-BG home]# rpm -ivh libFS-1.0.1-5.el6.x86_64.rpm
warning: libFS-1.0.1-5.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 66534c2b: NOKEY
Preparing... ########################################### [100%]
1:libFS ########################################### [100%]
[root@RedHat-BG home]# rpm -ivh ttmkfdir-3.0.9-51.fc27.x86_64.rpm
warning: ttmkfdir-3.0.9-51.fc27.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 9db62fb1: NOKEY
error: Failed dependencies:
libc.so.6(GLIBC_2.14)(64bit) is needed by ttmkfdir-3.0.9-51.fc27.x86_64
libstdc++.so.6(CXXABI_1.3.8)(64bit) is needed by ttmkfdir-3.0.9-51.fc27.x86_64
libstdc++.so.6(CXXABI_1.3.9)(64bit) is needed by ttmkfdir-3.0.9-51.fc27.x86_64
libstdc++.so.6(GLIBCXX_3.4.20)(64bit) is needed by ttmkfdir-3.0.9-51.fc27.x86_64
libstdc++.so.6(GLIBCXX_3.4.21)(64bit) is needed by ttmkfdir-3.0.9-51.fc27.x86_64
[root@RedHat-BG home]# rpm -ivh ttmkfdir-3.0.9-2-mdv2011.0.x86_64.rpm
warning: ttmkfdir-3.0.9-2-mdv2011.0.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 26752624: NOKEY
Preparing... ########################################### [100%]
package ttmkfdir-3.0.9-32.1.el6.x86_64 (which is newer than ttmkfdir-3.0.9-2.x86_64) is already installed
file /usr/bin/ttmkfdir from install of ttmkfdir-3.0.9-2.x86_64 conflicts with file from package ttmkfdir-3.0.9-32.1.el6.x86_64
[root@RedHat-BG home]# rpm -ivh ./chkfontpath-1.10.1-7mdv2011.0.x86_64.rpm ./xorg-x11-xfs-1.0.5-7.el6.x86_64.rpm
warning: ./chkfontpath-1.10.1-7mdv2011.0.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 78d019f5: NOKEY
warning: ./xorg-x11-xfs-1.0.5-7.el6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID 66534c2b: NOKEY
Preparing... ########################################### [100%]
1:xorg-x11-xfs ########################################### [ 50%]
2:chkfontpath ########################################### [100%]
[root@RedHat-BG home]# rpm -ivh fonts-chinese-3.02-12.el5.noarch.rpm
warning: fonts-chinese-3.02-12.el5.noarch.rpm: Header V3 DSA/SHA1 Signature, key ID 37017186: NOKEY
Preparing... ########################################### [100%]
1:fonts-chinese ########################################### [100%]
[root@RedHat-BG home]# rpm -ivh iso8859-2-75dpi-fonts-1.0-34.fc27.noarch.rpm
warning: iso8859-2-75dpi-fonts-1.0-34.fc27.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID f5282ee4: NOKEY
error: Failed dependencies:
iso8859-2-fonts-common = 1.0-34.fc27 is needed by iso8859-2-75dpi-fonts-1.0-34.fc27.noarch
[root@RedHat-BG home]# rpm -ivh iso8859-2-fonts-common-1.0-34.fc27.noarch.rpm
warning: iso8859-2-fonts-common-1.0-34.fc27.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID f5282ee4: NOKEY
Preparing... ########################################### [100%]
1:iso8859-2-fonts-common ########################################### [100%]
[root@RedHat-BG home]# rpm -ivh iso8859-2-75dpi-fonts-1.0-34.fc27.noarch.rpm
warning: iso8859-2-75dpi-fonts-1.0-34.fc27.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID f5282ee4: NOKEY
Preparing... ########################################### [100%]
1:iso8859-2-75dpi-fonts ########################################### [100%]
各种依赖包安装成功。
linux安装中文语言包
相关配置如下:
yum install fonts-chinese.noarch
yum install m17n-db-common-cjk
yum install m17n-db-chinese
安装上面的几个语言包重启就正常了
yum groupinstall chinese-support
CentOS 5.0 安装中文语言包以及输入法
语言包的安装方法有三个。两个Yum方式的,一个rpm方式的。
其一:yum方式——完全的中文环境支持。这个方式的缺点是要从FTP上下载安装包,下载的包的数量虽然可以选择,但仍然是个不小的量。
以root身份登陆,运行命令:
yum groupinstall <language>-support
在上面的命令中,<language> 是下列之一: assamese, bengali, chinese, gujarati, hindi, japanese, kannada, korean, malayalam, marathi, oriya, punjabi, sinhala, tamil, thai, 或 telegu。
若提示如下错误信息
Another app is currently holding the yum lock; waiting for it to exit...
The other application is: yum-updatesd-he
Memory : 15 M RSS ( 27 MB VSZ)
Started: Sat Apr 10 13:34:25 2010 - 09:39 ago
State : Sleeping, pid: 3008
则可以用 ps -U root 和kill命令来结束正在占用Yum的程序,然后再次执行上面的命令。
其二:还是yum方式,但是命令是:
yum install fonts-chinese fonts-ISO8859-2-75dpi
该方式的第一个包貌似也不小。
其三:rpm方式。在安装盘上已经有各种语言包了,我们只需要找到他们,并安装就可以了。中文的是
fonts-chinese-3.02-9.6.el5.noarch.rpm
fonts-ISO8859-2-75dpi-1.0-17.1.noarch.rpm
我用的是6CD的安装盘,第一个包在4of6盘上,第二个在6of6盘上,
进入各文件对应目录,运行下面命令:
#rpm -ivh fonts-chinese-3.02-9.6.el5.noarch.rpm
#rpm -ivh fonts-ISO8859-2-75dpi-1.0-17.1.noarch.rpm
中文输入法按如下安装:
rpm -ivh scim-1.4.4-41.el5.i386.rpm
rpm -ivh scim-pinyin-0.5.91-16.el5.i386.rpm
rpm -ivh scim-tables-0.5.6-7.i386.rpm
rpm -ivh scim-tables-additional-0.5.6-7.i386.rpm
rpm -ivh scim-tables-chinese-0.5.6-7.i386.rpm
注:这些也在安装盘上,仍需要以root运行。具体版本可能有所变化。
Linux中文显示乱码?如何设置centos显示中文
后记:
想尽办法:安装和切换中文环境后RedHat崩溃:虚拟机重置
仍然不好使,这样,在登录输入用户名root后发现下面有语言选择,设置回英文,应用新语言文件夹名,终于还原!!
重新编辑文件和设置LANG变量:
vi /etc/sysconfig/i18n
LANG="zh_CN.UTF-8"
SYSFONT="latarcyrheb-sun16"
和
修改LANG系统变量为:
LANG="zh_CN.UTF-8"------------------------------------------------------------这是个临时设置!!
[root@RedHat-BG ~]# echo $LANG
zh_CN.UTF-8
重启登录,输入用户名root后在最下方的语言选择上选择中文-UTF-8
拖入虚拟机一个中文文件,显式中文成功!!
按Ctrl+Space组合键,即可实现中英文切换,中文输入!!
将这个过程改为en_US.UTF-8,则恢复为英文界面(X_Windows)和编码!!
Red Hat Enterprise Linux 6.0怎么设置中文
推荐于2016-04-05 11:41:49
最佳答案
1、首先, 保证环境变量 LC_CTYPE 必须是zh_CN.UTF-8
locale可查看此变量的值。
2、桌面程序(GNOME, KDE)要安装 字体文件, 之后还要设置桌面的语言选项。KDE桌面, 则可以在"控制中心"设置。 字体文件可以从LINUX系统光盘里获得。
修改 /etc/sysconfig/i18n 这文件,
原文是LANG="en_US.UTF-8" 改为 LANG="zh_CN.UTF-8" 就可以了。
改变redhat的系统语言/字符集 简体中文语言包的安装
改变redhat的系统语言/字符集 简体中文语言包的安装
2008-11-27 11:28 A.M.
改变redhat的系统语言/字符集
改变redhat的系统语言/字符集修改 /etc/sysconfig/i18n 文件,如 LANG="en_US",xwindow会显示英文界面, LANG="zh_CN.GB18030",xwindow会显示中文界面。 还有一种方法 cp /etc/sysconfig/i18n $HOME/.i18n 修改 $HOME/.i18n 文件,如 LANG="en_US",xwindow会显示英文界面, LANG="zh_CN.GB18030",xwindow会显示中文界面。 这样就可以改变个人的界面语言,而不影响别的用户 (Debian不支持GB18030(RH的zysong字库是有版权的) 现在好像没有Free的GBK和GB18030字库 vi .bashrc export LANG=zh_CN.GB2312 export LC_ALL=zh_CN.GB2312)
-----------
简体中文语言包的安装
于是我先用root用户从英文界面进入XWindows桌面,打开CDROM中的rhel5.1 dvd/Server/目录,双击安装以下文件,重启就可以正常显示汉字了:
fonts-chinese-2.15-2.noarch.rpm fonts-ISO8859-2-1.0-14.noarch.rpm fonts-ISO8859-2-75dpi-1.0-14.noarch.rpm fonts-ISO8859-2-100dpi-1.0-14.noarch.rpm
还有,就是修改系统语言配置文件/etc/sysconfig/i18n为:
LANG="zh_CN.UTF-8"
vim设置字符集编辑不同编码文件:
设置vi/vim实现打开不同字符编码的文件
2011-09-23
zengxiaow...
文章来源 阅 812
1>说明: 默认vi/vim会根据terminal的locale设置,使用相应的字符编码。 如: # locale LANG=en_US.UTF-8 LC_CTYPE=zh_CN.UTF-8 LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL= # vim 查看默认的字符编码 :set fileencodings fileencodings=utf-8,latin1 2>实现 知道了上面这些,当我们在打开一个其它编码的文件时,只要先设置一下vi/vim的fileencodings值就可以了。 (1)动态设置实现 # vim :set fileencodings gb2312,utf-8 多个字符编码以“,”隔开。 (2)配置文件静态设置实现 配置一下vi/vim的配置文件: vi ~/.vimrc set fileencodings=utf-8,gb2312 (gb2312中文编码,当windows含有中文文件在Linux出现乱码需设置该编码) |
|
|
VIM字符集编码设置
安装完中文语言包支持后,Ubuntu的默认locale是zh_CN.UTF-8(即简体中文语言环境,字符集内码UTF-8)。这与我们日常开发环境中Unix设定的环境有所区别,我们日常使用的环境一般为zh_CN.GBK或zh。我们的源代码文件的字符编码也都是GBK的编码,直接在Ubuntu下用默认设置的VIM打开后,中文的注释会显示乱码。如果你直接编辑这个文件并提交,那么其他在Unix下开发的同事Checkout这份源码后打开也将显示乱码(你新增的中文内容会是乱码)。
解决这个问题至少有两种方法:一种是为Ubuntu新增加一个zh_CN.GBK的locale的支持,内码使用GBK;另外一种就是通过设置VIM,在不变换Ubuntu所支持的locale(内码依旧是UTF-8)的情况下支持对GBK内码文件的读写。
第一种方法简单说一下,总共分四步走:
第一步:sudo vi /var/lib/locales/supported.d/local,该文件原始状态只有一行记录:zh_CN.UTF-8 UTF-8;为了增加zh_CN.GBK的locale,我们在这个文件尾添加一行:zh_CN.GBK GBK,保存退出。
第二步:执行:sudo locale-gen,生成zh_CN.GBK对应的locale
第三步:编辑:/etc/environment,在文件尾添加如下内容:
LANGUAGE="zh_CN:zh:en_US:en"
LANG=zh_CN.GBK
LC_CTYLE=zh_CN.GBK
LC_ALL="zh_CN.GBK"
第四步:重启Ubuntu系统。重启后用VIM再打开以前GBK编码的源代码文件,就不再会有乱码了,而且默认情况下编辑文件采用的依然是GBK编码。不会影响他人在其他平台上读写文件。
第二种方法是本文重点要谈的内容。即在zh_CN.UTF-8的环境下保证正确读写GBK编码的文件。问题主要集中在:如何读出并正确显示已有的特定字符编码的文件和如何按照特定字符编码写新文件。
这里有两个数据文件:data1和data2,内容都是“祝祖国六十年生日快乐”,但是data1采用UTF-8编码,而data2采用GBK编码,可以用od -x查看文件实际存储数据是不同的。
od -x data1
0000000 a5e7 e79d 96a5 9be5 e5bd ad85 8de5 e581
0000020 b4b9 94e7 e69f a597 bfe5 e4ab 90b9 000a
0000037
od -x data2
0000000 a3d7 e6d7 fab9 f9c1 aeca eac4 fac9 d5c8
0000020 ecbf d6c0 000a
0000025
在终端UTF-8编码,LC_ALL=zh_CN.UTF-8,VIM默认配置的前提下,尝试用VIM分别打开data1和data2,发现data1正常显示,data2显示乱码;为什么呢?这里VIM当打开一个已存在的文件时会有一系列的处理过程:
用VIM打开一个已存在的文件时,VIM首先要查看fileencodings(或fencs)这个option。fileencodings是一 系列字符编码格式的列表,例如:set fileencodings=GBK,UTF-8,gb18030,ucs-bom,cp936。这个option仅在打开一个已存在的文件时起作用。如 果你没有在.vimrc中显式set这个option,那fileencodings的默认值是'ucs-bom,UTF- 8,default,latin1',其中default的值是用户环境的默认编码格式。
当你打开一个已存在的文件时,VIM会用fileencodings值列表中的编码格式逐一去探测该文件的编码方式,直到两者匹配一致。探测成功 后,VIM会用匹配到的编码格式去设置此文件session的fileencoding选项值。fileencoding选项指示该session的 VIM BUFFER里的数据写入文件或从文件读出时文件中的数据的编码格式。同样该session中VIM BUFFER中数据的编码格式则由另外一个选项指示,那就是encoding option。这里有多个"encoding-like"字样的options,极易混淆。但实际上真正对VIM文件操作时数据显示和保存起作用的只有两 个选项:fileencoding和encoding。而fileencodings只是在打开已有文件时用来探测并设置fileencoding字段的 一个外围option。VIM的编码转换也是围绕fileencoding和encoding这两个options展开的。无论读写文件,当某个VIM session中fileencoding和encoding的值不一致时,VIM就会自动做编码转换。例如:当读取一个文件时,session的 fileencoding为UTF-8,而encoding为GBK时,VIM将文件中的数据读出来后会自动做一个UTF-8到GBK的转换,并将转换后 的数据存储在VIM针对该session的BUFFER里;同样当创建一个新文件时,如果该session的vim BUFFER中数据的编码格式(encoding指示)和fileencoding指示的文件编码格式不一致时,save file时,VIM会自动将BUFFER中的数据按照fileencoding指示的编码格式进行一次转换后再存入新文件中。
每个option都有三种状态:显式设置、空(encoding除外)和默认值。其中显式设置是指在.vimrc或在session中利用set指 令对选项进行赋值设置;空:比较特殊,表示该选项的值为empty;默认值则是未通过set在.vimrc或在session对选项进行赋值的状态。
fileencodings为空时,即在.vimrc中set fileencodings="";VIM将无法进行文件编码探测,将直接根据fileenoding和encoding的值来确定文件编码和 BUFFER编码以及是否需要自动做编码转换;当fileencodings不为空,但探测文件编码均告失败时,VIM会将该session的 fileencoding置为空,之后将根据encoding的值来设置文件编码和VIM BUFFER编码。
fileencoding的默认值就是空(""),打开已有文件时通过fileencodings来设置其值,新建文件时如果fileencoding为默认值或空,那么encoding将决定一切。其显式设置的值只有在新建文件的session中才会其作用。
encoding是核心,是VIM session中BUFFER数据的编码,也可以理解为VIM核心的内码;VIM会根据它与fileencoding、termencoding(term的编码格式)的不同由VIM做自动转码。encoding默认值为$LANG。
下面用一些例子来说明一下VIM的行为模式,测试环境Ubuntu 9.04, LANG=zh_CN.UTF-8, data1和data2如上所述。
(1) 三个Option均采用默认值,没有在.vimrc下显式设置
此 时在vim session未建立之前,fileencodings的默认值为“ucs-bom,UTF- 8,default,latin1”,fileencoding为空,encoding=UTF-8($LANG).打开data1,VIM通过 fileencodings做探测,顺利匹配到UTF-8的编码格式,将fileencoding设置为UTF-8,此时encoding也为UTF- 8,两者一致,VIM不做编码转换,屏幕正确显示“祝祖国六十年生日快乐”。打开data2,VIM通过fileencodings做探测,未能匹配到 GBK的编码,将fileencoding置为空,encoding发挥作用,VIM不做任何编码转换,将GBK编码的数据以UTF-8格式显示,屏幕显 示乱码。
(2) fileencodings显式被设置为"UTF-8,GBK",其他option采用默认值
此时在vim session未建立之前,fileencodings的值为“UTF-8,GBK”,fileencoding为空,encoding=UTF- 8($LANG).打开data1,VIM通过fileencodings做探测,顺利匹配到UTF-8的编码格式,将fileencoding设置为 UTF-8,此时encoding也为UTF-8,两者一致,VIM不做编码转换,屏幕正确显示“祝祖国六十年生日快乐”。打开data2,VIM通过 fileencodings做探测,顺利匹配到GBK的编码,将fileencoding置为GBK,此时encoding为UTF-8,两者不一 致,VIM做自动编码转换,将GBK编码的数据转换为UTF-8格式后放入BUFFER并显示,屏幕正确显示“祝祖国六十年生日快乐”,VIM在状态条提 示“已转换”。
(3) fileencoding显式设置为"GBK",encoding显式设置为“UTF-8”或采用默认值
新建一个文件data3, 输入:“祝祖国六十年生日快乐”,保存,此时fileencoding和encoding值不一致,VIM做自动编码转换,将BUFFER中的UTF-8 编码的数据转换为GBK编码后存储到文件中,VIM状态栏提示“已转换”。退出VIM。od -x data3,输出的是GBK编码。
转载自:
http://bigwhite.blogbus.com/logs/47259473.html
vim 编码方式的设置
和所有的流行文本编辑器一样,Vim 可以很好的编辑各种字符编码的文件,这当然包括UCS-2、UTF-8 等流行的 Unicode 编码方式。然而不幸的是,和很多来自 Linux 世界的软件一样,这需要你自己动手设置。
Vim 有四个跟字符编码方式有关的选项,encoding、fileencoding、fileencodings、termencoding (这些选项可能的取值请参考 Vim 在线帮助 :help encoding-names),它们的意义如下:
* encoding: Vim 内部使用的字符编码方式,包括 Vim 的 buffer (缓冲区)、菜单文本、消息文本等。默认是根据你的locale选择.用户手册上建议只在 .vimrc 中改变它的值,事实上似乎也只有在.vimrc 中改变它的值才有意义。你可以用另外一种编码来编辑和保存文件,如你的vim的encoding为utf-8,所编辑的文件采用cp936编码,vim会自动将读入的文件转成utf-8(vim的能读懂的方式),而当你写入文件时,又会自动转回成cp936(文件的保存编码).
* fileencoding: Vim 中当前编辑的文件的字符编码方式,Vim 保存文件时也会将文件保存为这种字符编码方式 (不管是否新文件都如此)。
* fileencodings: Vim自动探测fileencoding的顺序列表, 启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式,并且将 fileencoding 设置为最终探测到的字符编码方式。因此最好将Unicode 编码方式放到这个列表的最前面,将拉丁语系编码方式 latin1 放到最后面。
* termencoding: Vim 所工作的终端 (或者 Windows 的 Console 窗口) 的字符编码方式。如果vim所在的term与vim编码相同,则无需设置。如其不然,你可以用vim的termencoding选项将自动转换成term的编码.这个选项在 Windows 下对我们常用的 GUI 模式的 gVim 无效,而对 Console 模式的Vim 而言就是 Windows 控制台的代码页,并且通常我们不需要改变它。
好了,解释完了这一堆容易让新手犯糊涂的参数,我们来看看 Vim 的多字符编码方式支持是如何工作的。
1. Vim 启动,根据 .vimrc 中设置的 encoding 的值来设置 buffer、菜单文本、消息文的字符编码方式。
2. 读取需要编辑的文件,根据 fileencodings 中列出的字符编码方式逐一探测该文件编码方式。并设置 fileencoding 为探测到的,看起来是正确的 (注1) 字符编码方式。
3. 对比 fileencoding 和 encoding 的值,若不同则调用 iconv 将文件内容转换为encoding 所描述的字符编码方式,并且把转换后的内容放到为此文件开辟的 buffer 里,此时我们就可以开始编辑这个文件了。注意,完成这一步动作需要调用外部的 iconv.dll(注2),你需要保证这个文件存在于 $VIMRUNTIME 或者其他列在 PATH 环境变量中的目录里。
4. 编辑完成后保存文件时,再次对比 fileencoding 和 encoding 的值。若不同,再次调用 iconv 将即将保存的 buffer 中的文本转换为 fileencoding 所描述的字符编码方式,并保存到指定的文件中。同样,这需要调用 iconv.dll由于 Unicode 能够包含几乎所有的语言的字符,而且 Unicode 的 UTF-8 编码方式又是非常具有性价比的编码方式 (空间消耗比 UCS-2 小),因此建议 encoding 的值设置为utf-8。这么做的另一个理由是 encoding 设置为 utf-8 时,Vim 自动探测文件的编码方式会更准确 (或许这个理由才是主要的 ;)。我们在中文 Windows 里编辑的文件,为了兼顾与其他软件的兼容性,文件编码还是设置为 GB2312/GBK 比较合适,因此 fileencoding 建议设置为 chinese (chinese 是个别名,在 Unix 里表示 gb2312,在 Windows 里表示cp936,也就是 GBK 的代码页)。
对于fedora来说,vim的设置一般放在/etc/vimrc文件中,不过,建议不要修改它。可以修改~/.vimrc文件(默认不存在,可以自己新建一个),写入所希望的设置。
我的.vimrc文件如下:
:
set
encoding=utf-8
:
set
fileencodings=ucs-bom,utf-8,cp936
:
set
fileencoding=gb2312
:
set
termencoding=utf-8
|
其中,fileencoding配置可以设置utf-8,但是我的mp3好像不支持utf-8编码,所以干脆,我就设置为gb2312了。现在搞定了,不管是vi中还是mp3上都可以显示无乱码的.txt文件了。
参考:http://blog.chinaunix.net/u2/80678/showart_2043323.html
设置Ubuntu系统和Vim字符集为utf8
Ubuntu编码设置
首先我们将ubuntu系统设置为utf8的字符集:
假设我们安装中文包:
1、安装中文语言包
Shell>apt-get install language-pack-zh
2、用vim配置语言环境变量
Shell>vim /etc/environment
Shell>vim /etc/default/locale
在下面添加如下两行
LANG="zh_CN.UTF-8"
LANGUAGE="zh_CN:zh:en_US:en"
如果你想用英文环境了,改成这两行就OK
LANG="en_US.UTF-8"
LANGUAGE="en_US:en"
3、重启Ubuntu Server
reboot
4、可以用locale查看一下环境变量...
locale
Vim编码设置
Shell>vim /etc/vim/vimrc 在打开的文件最下面加上以下两段字符串
let &termencoding=&encoding
set fileencodings=utf-8,gb18030,gbk,gb2312,big5