Linux下windows中文文本文件亂碼問題


table of content:

  1. 亂碼問題
  2. 用gedit選擇正確的字符編碼打開文件
  3. 文件轉碼
  4. 總結

 

§亂碼

Fedora安裝時默認用UTF-8字符編碼方式, 這么做有國際化的好處(和很多用utf-8的地方兼容), 但是也有兼容問題. 比如:

中文編碼在windows下不是utf-8編碼, 因為政策要求, 在中國銷售的軟件要用國標碼 (即GBK, GB2312, GB18030(最新的))

所以中文windows用GB18030的編碼, 這就導致一個小問題. 在linux下打開windows的文件出現亂碼, 如圖

 

用Gedit打開一個GB18030編碼的文件 (雙擊打開時)

為什么會這樣, 因為gedit用解碼utf-8的方式編碼(decode) 用GB18030編碼的文本, 就像用解釋英語解釋一段法語一樣,翻譯出一堆沒意義的句子.

 

§以正確字符編碼(character encodings)打開

解決亂碼的方法很簡單, gedit本身支持很多種字符編碼, 如圖

1. 用gedit的打開Open打開文件,

選擇其它文件(other documents...)   

2.

(左下角的Character encoding 處選擇正確的字符編碼)

然后,文件就正常打開啦:

(請忽略文本內容, 只是剛好是這個文件而已, 不是給網站打廣告......)

此外, 如果用命令行的方式打開一個文件可以用gedit --encoding 相應編碼 的方式來打開

 

§轉碼

用gedit打開一個文件

(此文件用gb2312編碼)

另存為 saveas 此時在左下角選擇utf-16的編碼,點擊save

此時新文件就是utf-16格式的, 在終端用file命令可以看到文件的新編碼

 

$ file 用utf-16保存的新文本.txt 
用utf-16保存的新文本.txt: Little-endian UTF-16 Unicode text, with CRLF, CR line terminators

 

 

 

也有其它工具用來轉碼, 將gb18030轉為utf-8, 比如 iconv

用法: iconv [options] [-f from-encoding] [-t to-encoding] [inputfile]...

$ file win_gb2312.txt 
    win_gb2312.txt: ISO-8859 text, with CRLF line terminators
$ iconv -f gb2312 -t utf-8 win_gb2312.txt  -o utf_encoding.txt  # (-o選項指定輸出文件)
$ file utf_encoding.txt 
    utf_encoding.txt: UTF-8 Unicode text, with CRLF line terminators

 

§總結

這些方法都有不可忽視的缺點: 那就是你要提前知道文件的原編碼方式是啥, 不然就要一個一個試.

如何查看一個文件的編碼方式, 可以用file命令查看, 但是file命令不可靠, 一個gb2312編碼的文件file命令判斷為ISO-8859...

所以還是不夠"智能"啊..這些軟件...


免責聲明!

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



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