Linux中文顯示亂碼問題解決方法(編碼查看及轉換)


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM