1. 程式人生 > >(linux)中文顯示亂碼問題解決方法(編碼檢視及轉換)

(linux)中文顯示亂碼問題解決方法(編碼檢視及轉換)

前言


我們在使用Linux系統中,經常會發生這樣一類問題。檔案的中文部分出現亂碼。有的時候,是檔名的中文部分出現亂碼;有的時候是,檔案內容中的中文部分出現亂碼。
下面要介紹的就是Linux中,各類中文亂碼的解決方法。




示例


圖中名為一個.sql檔案的一段內容,是一個數據庫檔案。其在windows中開啟顯示正常,在Linux中,中文部分顯示為亂碼。

在這裡插入圖片描述


注意:這個與資料庫亂碼的情況不同,屬於檔案內容的亂碼。




解析


Linux系統與windows系統在編碼上有顯著的差別。Windows中的檔案的格式預設是GBK(gb2312),而Linux系統中檔案的格式預設是UTF-8。這兩個系統就好比是中國和日本。檔案就好比是一個人,如果要在另外的國家居住就要辦理居住許可證,使用他國的證件(編碼和字符集),否則是不被允許的黑戶。因此,解決中文亂碼問題要從編碼和字符集著手。

檔案出現編碼錯誤的原因:
當前系統的字符集有問題
某個檔案的編碼有問題




解決方法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>檢視


在這裡插入圖片描述

在這裡插入圖片描述




解決方法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