我从windows系统里把一个UTF-8的文件传到centos里,用vim打开却发现中文全部都是乱码,随即在网上查了原因,找到解决办法。以下是几点要注意的要点:
<1> 确认文件的编码
file是检测文件类型的命令,用它检测文件类型
OK--文件UTF-8编码。
<2> 确认ssh终端的编码
如果你使用的是SecureCRT,也要注意要把字符编码设置为:UTF-8
<3> 确认服务器用户目录下是否有.vimrc文件,以及其中配置
vim ~/.vimrc
在文件中加入如下几行:
set fileencodings=ucs-bom,utf-8,gbk,gb2312,cp936,gb18030,big5,latin-1
set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
在 Vim 中,有四个与编码有关的选项,它们是:fileencodings、fileencoding、encoding 和 termencoding。在实际使用中,任何一个选项出现错误,都会导致出现乱码。因此,每一个 Vim 用户都应该明确这四个选项的含义。下面,我们详细介绍一下这四个选项的含义和作用
1、encoding
encoding 是 Vim 内部使用的字符编码方式。当我们设置了 encoding 之后,Vim 内部所有的 buffer、寄存器、脚本中的字符串等,全都使用这个编码。Vim 在工作的时候,如果编码方式与它的内部编码不一致,它会先把编码转换成内部编码。如果工作用的编码中含有无法转换为内部编码的字符,在这些字符就会丢失。因此,在选择 Vim 的内部编码的时候,一定要使用一种表现能力足够强的编码,以免影响正常工作。
由于 encoding 选项涉及到 Vim 中所有字符的内部表示,因此只能在 Vim 启动的时候设置一次。在 Vim 工作过程中修改encoding 会造成非常多的问题。如果没有特别的理由,请始终将 encoding 设置为 utf-8。为了避免在非 UTF-8 的系统如 Windows 下,菜单和系统提示出现乱码,可同时做这几项设置:
set encoding=utf-8
set langmenu=zh_CN.UTF-8
language message zh_CN.UTF-8
2、termencoding
termencoding 是 Vim 用于屏幕显示的编码,在显示的时候,Vim 会把内部编码转换为屏幕编码,再用于输出。内部编码中含有无法转换为屏幕编码的字符时,该字符会变成问号,但不会影响对它的编辑操作。如果 termencoding 没有设置,则直接使用encoding 不进行转换。
举个例子,当你在 Windows 下通过 telnet 登录 Linux 工作站时,由于 Windows 的 telnet 是 GBK 编码的,而 Linux 下使用 UTF-8 编码,你在 telnet 下的 Vim 中就会乱码。此时有两种消除乱码的方式:一是把 Vim 的 encoding 改为 gbk,另一种方法是保持 encoding 为 utf-8,把 termencoding 改为 gbk,让 Vim 在显示的时候转码。显然,使用前一种方法时,如果遇到编辑的文件中含有 GBK 无法表示的字符时,这些字符就会丢失。但如果使用后一种方法,虽然由于终端所限,这些字符无法显示,但在编辑过程中这些字符是不会丢失的。
对于图形界面下的 GVim,它的显示不依赖 TERM,因此 termencoding 对于它没有意义。在 GTK2 下的 GVim 中,termencoding 永远是 utf-8,并且不能修改。而 Windows 下的 GVim 则忽略 termencoding 的存在。
3、fileencoding
当 Vim 从磁盘上读取文件的时候,会对文件的编码进行探测。如果文件的编码方式和 Vim 的内部编码方式不同,Vim 就会对编码进行转换。转换完毕后,Vim 会将 fileencoding 选项设置为文件的编码。当 Vim 存盘的时候,如果 encoding 和fileencoding 不一样,Vim 就会进行编码转换。因此,通过打开文件后设置 fileencoding,我们可以将文件由一种编码转换为另一种编码。但是,由前面的介绍可以看出,fileencoding 是在打开文件的时候,由 Vim 进行探测后自动设置的。因此,如果出现乱码,我们无法通过在打开文件后重新设置 fileencoding 来纠正乱码。
4、fileencodings
编码的自动识别是通过设置 fileencodings 实现的,注意是复数形式。fileencodings 是一个用逗号分隔的列表,列表中的每一项是一种编码的名称。当我们打开文件的时候,VIM 按顺序使用 fileencodings 中的编码进行尝试解码,如果成功的话,就使用该编码方式进行解码,并将 fileencoding 设置为这个值,如果失败的话,就继续试验下一个编码。
因此,我们在设置 fileencodings 的时候,一定要把要求严格的、当文件不是这个编码的时候更容易出现解码失败的编码方式放在前面,把宽松的编码方式放在后面。
例如,latin1 是一种非常宽松的编码方式,任何一种编码方式得到的文本,用 latin1 进行解码,都不会发生解码失败——当然,解码得到的结果自然也就是理所当然的“乱码”。因此,如果你把 latin1 放到了 fileencodings 的第一位的话,打开任何中文文件都是乱码也就是理所当然的了。
以下是推荐的一个 fileencodings 设置:
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
其中,ucs-bom 是一种非常严格的编码,非该编码的文件几乎没有可能被误判为 ucs-bom,因此放在第一位。
utf-8 也相当严格,除了很短的文件外(例如许多人津津乐道的 GBK 编码的“联通”被误判为 UTF-8 编码的经典错误),现实生活中一般文件是几乎不可能被误判的,因此放在第二位。
接下来是 cp936 和 gb18030,这两种编码相对宽松,如果放前面的话,会出现大量误判,所以就让它们靠后一些。cp936 的编码空间比 gb18030 小,所以把 cp936 放在 gb18030 前面。
至于 big5、euc-jp 和 euc-kr,它们的严格程度和 cp936 差不多,把它们放在后面,在编辑这些编码的文件的时候必然出现大量误判,但这是 Vim 内置编码探测机制没有办法解决的事。由于中国用户很少有机会编辑这些编码的文件,因此我们还是决定把 cp936 和 gb18030 前提以保证这些编码的识别。
最后就是 latin1 了。它是一种极其宽松的编码,以至于我们不得不把它放在最后一位。不过可惜的是,当你碰到一个真的 latin1 编码的文件时,绝大部分情况下,它没有机会 fall-back 到 latin1,往往在前面的编码中就被误判了。不过,正如前面所说的,中国用户没有太多机会接触这样的文件。
如果编码被误判了,解码后的结果就无法被人类识别,于是我们就说,这个文件乱码了。此时,如果你知道这个文件的正确编码的话,可以在打开文件的时候使用 ++enc=encoding 的方式来打开文件,如:
:e ++enc=utf-8 myfile.txt
<4> 确认系统编码
vim /etc/sysconfig/i18n
1、LANG变量是language的简称,个变量是决定系统的默认语言的,即系统的菜单、程序的工具栏语言、输入法默认语言等。
2、SYSFONT是system font的简称,决定系统默认用哪一种字体。
3、SUPPORTED变量决定系统支持的语言,即系统能够显示的语言。
需要说明的是,由于计算机起源于英语国家,因此,不管你把这些变量设置成什么,英语总是默认支持的,而且不管用什么字体,英文字体总包含在其中。
相关推荐
本篇文章将深入探讨如何在CentOS系统中实现中文支持,解决中文乱码问题。 首先,我们需要了解的是,Linux系统的字符编码默认可能是UTF-8或者其他非中文编码,这就会导致中文文件名、网页内容或者命令行输出出现乱码...
本文将详细介绍如何在CentOS中安装中文字体,解决中文乱码问题。 首先,我们需要准备中文字体文件。在提供的压缩包中,有一个名为`simsun.ttc`的文件,这是宋体的TrueType Collection字体,适用于Windows和Mac系统...
在Linux系统中,CentOS是广泛...通过以上步骤,大多数情况下都可以解决CentOS系统中的中文乱码问题,让中文在CentOS中能够正常显示。如果问题依然存在,可能需要进一步排查系统其他层面的设置,或者寻求社区的帮助。
标题中的“中文乱码CentOS Linux”提示我们讨论的核心是关于在 CentOS Linux 操作系统中处理中文字符显示问题。在Linux环境下,由于默认配置可能不支持中文字符集,所以经常会出现中文乱码的情况,这对于中文用户来...
在Linux系统中,中文字符的显示常常会遇到乱码的问题,这主要源于系统对中文编码的支持不足。"Linux中文乱码之中文支持rpms"这个主题聚焦于如何通过安装特定的RPM(Red Hat Package Manager)软件包来解决这个问题。...
通过以上步骤,您应该能够成功解决CentOS8中的bash乱码问题,无论是命令行输出还是shell脚本中的中文字符都能正常显示。确保系统语言环境与文件编码匹配,是避免乱码的关键。同时,了解如何调整和检查这些设置,对于...
本文将详细介绍如何在Linux环境下安装配置JDK6、Tomcat6以及解决Oracle11g数据库中文显示乱码的问题。整个过程涵盖了从Linux系统的安装到最终部署J2EE应用系统的全过程,旨在为读者提供一个完整且实用的操作指南。 ...
PieTTY连CentOS时,中文部分是乱码?那应该如何解决呢? 【解决方法】 第一步、检查系统的语言设定(图) 代码如下: # vim /etc/sysconfig/i18n 第二步、设置 PieTTy 选项(图) 第三步,...
安装完成后,使用`vim`代替`vi`打开文件,vim具有更好的编码处理能力,可以避免或解决乱码问题。 2. **访问PHP文件出现源代码未安装libapache2-mod-php**: 当你在浏览器中尝试访问PHP文件时,如果看到的是源代码...
网盘文件永久链接 第1章-Linux课程介绍-学习环境搭建 1-Linux发展史 2-VMware虚拟机安装 ...3-实战-解决上传windows中文文档乱码和串行的问题 4-实战-在Centos6上恢复ext4文件系统下误删除的文件 .......
自己亲手制作的,Centos 7.9 基于VMware 16 pro (版本号16.2.2 build...功能实现:虚拟工具正常使用(拖拉文件,复制、粘贴),中文支持(无乱码),VIM中文支持(无乱码)。动态IP获取。开发平台的初始态。百度网盘下载。
构建了一个镜像发现部署应用的时候打印出来的中文是乱码, 日志的时间显示的是UTC时间, 比北京时间少了8个小时, 想看某一个进程是否起来的时候发现telnet命令 ps命令 netstat命令不可用, 想要编辑文件的时候发现vim...
在描述中提到,安装此字体可能是因为在使用Vim编辑器和YouCompleteMe插件时遇到了乱码问题。YouCompleteMe是一款强大的Vim代码补全引擎,能够提供自动完成、跳转定义等功能。当Vim在非UTF-8编码环境中运行或者缺少...
在Linux系统中,由于其最初的设计主要面向英文环境,因此对于中文的支持可能不如Windows或Mac OS那样直观。然而,Linux完全有能力处理中文字符,并且有多种方式实现这一目标。本篇将详细介绍如何在Linux中设置中文...
在RHEL/CentOS系统中,使用`sudo yum install vim`;而在Fedora 22及更高版本中,命令是`sudo dnf install vim`。 在Vim中对文件进行密码保护,可以使用 `-x` 选项。例如,创建一个名为 `file.txt` 的加密文件,你...
win下需要utf-8的encoding设置,如果出现乱码,请用win_utf_dll中的文件覆盖gvim的原有文件。 linux如果出现glibc不兼容(编译时使用的glib2.11,支持debian6,Fedora19,ubuntu10和redhat及以下),需要设置LD_...
SecureCRT 是一个流行的远程连接工具,但有时可能会出现乱码问题。解决该问题可以通过设置 SecureCRT 的编码方式来解决。 十、客户端远程连接 客户端远程连接到 Linux 服务器可以使用 SecureCRT、PuTTY 等工具。...
在本文中,我们将深入探讨如何在CentOS 6.9操作系统上安装和配置MySQL 5.7.17。这个过程包括了从上传安装包到设置远程访问权限等一系列步骤,确保你可以顺利地在你的服务器上运行MySQL数据库。 首先,我们开始安装...
启动后发现界面乱码,于是修改 start_navicat 文件: ljh@he-pc:~/snap/navicat$ vim start_navicat 找到文件里面的语言设置,由原来的en_US.UTF-8 改为 zh_CN.uft8: #!/bin/sh cd `dirname "$0"` navicat_root=`...