Linux中文顯示亂碼問題解決方法(編碼查看及轉換)
1,示例
圖中名為一個.sql文件的一段內容,是一個數據庫文件。其在windows中打開顯示正常,在Linux中,中文部分顯示為亂碼。
注意:這個與數據庫亂碼的情況不同,屬於文件內容的亂碼。
2,分析
Linux系統與windows系統在編碼上有顯著的差別。Windows中的文件的格式默認是GBK(gb2312),而Linux系統中文件的格式默認是UTF-8。這兩個系統就好比是中國和日本。文件就好比是一個人,如果要在另外的國家居住就要辦理居住許可證,使用他國的證件(編碼和字符集),否則是不被允許的黑戶。因此,解決中文亂碼問題要從編碼和字符集着手。
文件出現編碼錯誤的原因:
當前系統的字符集有問題
某個文件的編碼有問題
3,解決方案
3.1方案一:從系統的字符集處理
當系統中多個文件的內容出現亂碼問題,或者中文文件名顯示亂碼時,就先從系統的字符集處理。
常用字符集:
中文
LANG=“zh_CN.UTF-8”
英文
LANG=“en_US.UTF-8”
或
LANG=C
1,查看字符集
<1>查看當前系統默認采用的字符集
locale
<2>查看系統當前字符集
echo $LANG
<3>查看系統是否安裝中文字符集
出現zh開頭的,即為安裝了中文字符集
如未安裝,需執行: yum -y groupinstall chinese-support
locale -a |grep zh
2,修改系統字符集
<1>修改系統字符集為中文
如果前面查看到的系統當前的字符集是英文,通常修改系統字符集為中文即可成功。
臨時修改(當前終端生效): export LANG="zh_CN.UTF-8" 永久修改: echo "export LANG="zh_CN.UTF-8" >> /etc/proflile source /etc/profile
<2>查看
echo $LANG
3.2 解決方法二:從文件的編碼處理
當系統的字符集為中文,文件的中文部分仍然顯示亂碼,就從文件的編碼格式處理。
1,查看文件編碼
<1>查看文件編碼(vim方式)
用vim打開文件,輸入:set fileencoding
fileencoding后即為該文件編碼格式
<2>查看文件編碼(file方式)
file 文件名 或 file --mime-encoding 文件名
2,修改文件的字符集
<1>文件的編碼轉換(vim方式)
這個方法,僅在vim查看時進行編碼轉換,文件實際上本身編碼並未轉換,僅僅只是可看到。
臨時轉換: 用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)編碼打開.
<2>文件的編碼轉換(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
<3>文件名編碼轉換(convmv方式)
該命令可轉換文件名的編碼(只是文件名編碼的轉換,文件內容不會發生變化)
安裝命令:yum -y install convmv
命令參數 -f 后面是原來的編碼方式 -t 后面是要轉換為的編碼方式 -r 遞歸處理子文件夾 -i 詢問每一個轉換 --notest 真實的執行,在默認情況下只會測試(只能以root權限執行)
{1}編碼轉換
基本格式: convmv -f 原編碼 -t 新編碼 --notest(可選) 文件名 或 convmv -f 原編碼 -t 新編碼 --notest(可選) -r 目錄名 示例:將read目錄下的UTF-8編碼的文件名轉換為GBK編碼 convmv -f UTF-8 -t GBK --notest -r read/
<4>文件的編碼轉換(enca方式)
該工具能自動識別文件編碼,且支持批量轉換
安裝命令:yum -y install enca
{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 < test.txt > test2.txt