1,示例
图中名为一个.sql文件的一段内容,是一个数据库文件。其在windows中打开显示正常linux文件中文乱码,在Linux中,英文部份显示为乱码。
注意:这个与数据库乱码的情况不同,属于文件内容的乱码。
2,剖析
Linux系统与windows系统在编码上有明显的差距。Windows中的文件的格式默认是GBK(gb2312),而Linux系统中文件的格式默认是UTF-8。这两个系统就好比是中国和韩国。文件就好比是一个人,假如要在另外的国家居住就要申领居住许可证linux文件中文乱码,使用他国的护照(编码和字符集),否则是不被容许的白户。为此,解决英文乱码问题要从编码和字符集着手。
文件出现编码错误的缘由:
当前系统的字符集有问题
某个文件的编码有问题
3,解决方案3.1方案一:从系统的字符集处理
当系统中多个文件的内容出现乱码问题,或则英文文件名显示乱码时,就先从系统的字符集处理。
常用字符集:
英文
LANG=“zh_CN.UTF-8”
英语
LANG=“en_US.UTF-8”
或
LANG=C
1,查看字符集
查看当前系统默认采用的字符集
locale
查看系统当前字符集
echo$LANG
查看系统是否安装英文字符集
出现zh开头的,即为安装了英文字符集
如未安装,需执行:yum-ygroupinstallchinese-support
locale-a|grepzh
2linux论坛,更改系统字符集
更改系统字符集为英文
假如上面查看到的系统当前的字符集是英语,一般更改系统字符集为英文即可成功。
临时修改(当前终端生效): export LANG="zh_CN.UTF-8"永久修改:echo "export LANG="zh_CN.UTF-8" >> /etc/proflilesource /etc/profile
查看
echo$LANG
3.2解决方式二:从文件的编码处理
当系统的字符集为英文,文件的英文部份一直显示乱码,就从文件的编码格式处理。
1,查看文件编码
查看文件编码(vim形式)
用vim打开文件,输入:setfileencoding
fileencoding后即为该文件编码格式
查看文件编码(file形式)
file 文件名 或file --mime-encoding 文件名
2,更改文件的字符集
文件的编码转换(vim形式)
这个方式,仅在vim查看时进行编码转换,文件实际上本身编码并未转换adobe air linux,仅仅只是可看见。
临时转换: 用vim打开文件,输入:set fileencoding=utf-8永久转换(先确认vimrc位置):echo "set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936" >> /etc/vimrc 或echo "set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936" >> ~/.vimrc vim会依照fileencodings提供的编码列表,查找合适的编码,如果没有找到就用latin-1(ASCII)编码打开.
文件的编码转换(iconv形式)
该命令可进行文件内容的编码转换,并输出到其他位置(文件)
命令参数-f encoding 把字符由原来的编码开始转换 -t encoding 把字符转换为新编码-l 列出支持的编码字符(可选)-o file 指定输出文件(可选) -c 忽略输出的非法字符(可选)-s 禁止输出警告信息(可选)--verbose 显示进度(可选)
{1}.列举当前支持的字符编码
iconv-l
{2}.编码转换
基本格式: iconv -f 原编码 -t 新编码 原文件 -o 新文件 或 iconv -f 原编码 -t 新编码 原文件 > 新文件 示例:将UTF-8编码的wx.txt文件转换为GB2312编码的test01.txt iconv -f UTF-8 -t GB2312 wx.txt -o test01.txt
文件名编码转换(convmv形式)
该命令可转换文件名的编码(只是文件名编码的转换,文件内容不会发生变化)
安装命令:yum-yinstallconvmv
命令参数-f 后面是原来的编码方式-t 后面是要转换为的编码方式-r 递归处理子文件夹-i 询问每一个转换--notest 真实的执行,在默认情况下只会测试(只能以root权限执行)
{1}编码转换
-f 原编码 -t 新编码 ---f 原编码 -t 新编码 --notest(可选) ---f UTF- -t GBK --notest -r read/
文件的编码转换(enca形式)
该工具能手动辨识文件编码,且支持批量转换
安装命令:yum-yinstallenca
{1}.编码转换
基本格式 enca -L 原编码 -x 新编码 文件名 或 enca -L 原编码 -x 新编码 目录名 示例1:把当前目录下的所有文件都转成utf-8 enca -L zh_CN -x utf-8 * 示例2:检查文件的编码 enca -L zh_CN test.txt 示例3:将test.txt文件编码转换为"UTF-8"编码 enca -L zh_CN -x UTF-8 test.txt 示例4:将test.txt文件编码转换为"UTF-8"编码,并输入test2.txt中 enca -L zh_CN -x UTF-8 test2.txt