linux 中文乱码问题的解决方法
生活随笔
收集整理的這篇文章主要介紹了
linux 中文乱码问题的解决方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
(1)個vim打開一個文件時遇到中文亂碼問題
vim工具解析文件時使用的編碼方式不對
(2)源文件vim打開沒有亂碼,但是終端顯示亂碼
終端編碼方式不對,導致輸出為亂碼
解決方法:
(1)在vim中可以查看文件的編碼方式,:set fileencoding
?vim ~/.vimrc
?在里面加入一下設置:
?set encoding=utf-8 (vim內部使用的編碼)
?set termencoding=utf-8 (vim把內部編碼的內容輸出到終端的編碼,簡稱終端編碼)
?set fileencoding=utf-8 (文件編碼,即文件內容以fileencoding編碼保存到硬盤上)
?set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1(文件編碼探測列表)
?set termencoding=utf-8
?如果encoding和termencoding設置不同,vi會嘗試把encoding編碼的內容轉換為termencoding編碼后輸入到終端
?所以如果確??梢哉_的顯示內容,我們需要保證termencoding編碼表現能力強于或者等于encoding編碼的表現力,建議二者設置相同。如果沒有設置termencoding,則默認termencoding=encoding;如果有些字符不能正確從內部編碼轉換到終端編碼,則會顯示問號,但是可以完成對內容編輯。
?set fileencoding=utf-8
?vi打開一個文件會自動探測文件編碼,如果fileencoding編碼和encoding編碼不同,vi會把文件內容從fileencoding轉換為encoding編碼。當打開文件后vi會設置文件編碼為fileencoding,當保存文件內容時如果fileencoding!=encoding,vi會嘗試把encoding編碼的內存中數據轉換為fileencoding編碼保存到磁盤上。因此只要fileencoding和encoding的編碼表現力可以表示文件字符,既不會出現信息丟失問題;否則會出現數據丟失問題。
?set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
?vi打開一個文件有一個自動探測文件編碼的階段,自動探測文件編碼就是fileencodings參數設置的,這個列表表示vi探測編碼的順序,從左到右順序探測;如果探測成功則設置fileencoding為此時的編碼,如果失敗則繼續下一個探測。因此我們應該把編碼格式要求嚴格的、容易解碼失敗的編碼方式放在前面,編碼格式要求寬松的放在后面,從而提高探測正確率。如果把latin1編碼放在最前面,則打開任何文件都不會解碼失敗,但vi首先會對中文編碼的內容解碼成latin1到內存中(此時內從中的內容已經是亂碼了),然后再由latin1轉換為encoding編碼存入vi的buffer中,此時buffer中的內容自然也是亂碼;最后顯示到終端的內容自然也肯定是亂碼了。
?set encoding=utf-8?
?:set fileencoding=utf-8
?這樣終端輸出就對了 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
vim工具解析文件時使用的編碼方式不對
(2)源文件vim打開沒有亂碼,但是終端顯示亂碼
終端編碼方式不對,導致輸出為亂碼
解決方法:
(1)在vim中可以查看文件的編碼方式,:set fileencoding
?如果顯示編碼方式為latin1,那是因為vim解析文件時沒有設置解析的先后順序,直接默認用latin1解析,造成亂碼
?vim ~/.vimrc
?在里面加入一下設置:
?set encoding=utf-8 (vim內部使用的編碼)
?set termencoding=utf-8 (vim把內部編碼的內容輸出到終端的編碼,簡稱終端編碼)
?set fileencoding=utf-8 (文件編碼,即文件內容以fileencoding編碼保存到硬盤上)
?set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1(文件編碼探測列表)
?set termencoding=utf-8
?如果encoding和termencoding設置不同,vi會嘗試把encoding編碼的內容轉換為termencoding編碼后輸入到終端
?所以如果確??梢哉_的顯示內容,我們需要保證termencoding編碼表現能力強于或者等于encoding編碼的表現力,建議二者設置相同。如果沒有設置termencoding,則默認termencoding=encoding;如果有些字符不能正確從內部編碼轉換到終端編碼,則會顯示問號,但是可以完成對內容編輯。
?set fileencoding=utf-8
?vi打開一個文件會自動探測文件編碼,如果fileencoding編碼和encoding編碼不同,vi會把文件內容從fileencoding轉換為encoding編碼。當打開文件后vi會設置文件編碼為fileencoding,當保存文件內容時如果fileencoding!=encoding,vi會嘗試把encoding編碼的內存中數據轉換為fileencoding編碼保存到磁盤上。因此只要fileencoding和encoding的編碼表現力可以表示文件字符,既不會出現信息丟失問題;否則會出現數據丟失問題。
?set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
?vi打開一個文件有一個自動探測文件編碼的階段,自動探測文件編碼就是fileencodings參數設置的,這個列表表示vi探測編碼的順序,從左到右順序探測;如果探測成功則設置fileencoding為此時的編碼,如果失敗則繼續下一個探測。因此我們應該把編碼格式要求嚴格的、容易解碼失敗的編碼方式放在前面,編碼格式要求寬松的放在后面,從而提高探測正確率。如果把latin1編碼放在最前面,則打開任何文件都不會解碼失敗,但vi首先會對中文編碼的內容解碼成latin1到內存中(此時內從中的內容已經是亂碼了),然后再由latin1轉換為encoding編碼存入vi的buffer中,此時buffer中的內容自然也是亂碼;最后顯示到終端的內容自然也肯定是亂碼了。
?set encoding=utf-8?
?vim工作時候,所有的buffer、寄存器和腳本字符串等都使用這個編碼;如果文件內容編碼和encoding不同, vi會把文件轉碼然后把內容存入buffer中;如果encoding的編碼不足夠強的話,可能出現信息丟失情況。例如文件編碼為utf-8切包含了gbk無法表示的字符,encoding設置為gbk,此時將無法正確完成轉碼,無法轉換的部分將出現數據丟失情況。因此我們建議encoding一定要設置一個表現力足夠強的編碼,一般設置為utf-8編碼。
?:set fileencoding=utf-8
?這樣終端輸出就對了 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的linux 中文乱码问题的解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编程之美求二进制数中1的个数扩展题
- 下一篇: linux设置关闭省电模式