ubuntu下的“用vim開啟中文亂碼,用cat開啟正常顯示”的解決方法
系統環境:ubuntu10.04 vim gvim完全安裝
問題:終端下vim中的漢字為亂碼,網上搜尋了一些解決方案。但是奇怪的是,這些方法都不能實現gvim的選單和文中漢字,終端vim下的文中漢字同時正常顯示。有一種方案應用後vim和gvim開啟的檔案中的漢字(中文)都能正常顯示,但gvim的選單漢字為亂碼。對這些解決方案做了各種嘗試後,找到如下方面實現同時漢字均能正常顯示。
開啟終端
- $sudo -s
- #vim /etc/vim/vimrc
在檔案末尾新增如下程式碼:
- set fileencodings=gb2312,utf-8
- set fileencoding=gb2312
- set termencoding=utf-8
儲存後退出。問題解決,但是出現亂碼的具體原因是什麼還沒搞清楚。
下面引用一些參考資料:
http://doc.linuxpk.com/80308.html
1、支援中文編碼的基礎
Vim要更好地支援中文編碼需要兩個特性:+multi_byte和+iconv,可以用|:version|命令檢查當前使用的Vim是否支援,否則的話需要重新編譯。
2、影響中文編碼的設定項
Vim中有幾個選項會影響對多位元組編碼的支援:
- encoding(enc):encoding是Vim的內部使用編碼,encoding的設定會影響Vim內部的Buffer、訊息文字等。在 Unix環境下,encoding的預設設定等於locale;Windows環境下會和當前內碼表相同。在中文Windows環境下encoding的 預設設定是cp936(GBK)。
- fileencodings(fenc):Vim在開啟檔案時會根據fileencodings選項來識別檔案編碼,fileencodings可以同時設定多個編碼,Vim會根據設定的順序來猜測所開啟檔案的編碼。
- fileencoding(fencs) :Vim在儲存新建檔案時會根據fileencoding的設定編碼來儲存。如果是開啟已有檔案,Vim會根據開啟檔案時所識別的編碼來儲存,除非在儲存時重新設定fileencoding。
- termencodings(tenc):在終端環境下使用Vim時,通過termencoding項來告訴Vim終端所使用的編碼。
3、Vim中的編碼轉換
Vim內部使用iconv庫進行編碼轉換,如果這幾個選項所設定的編碼不一致,Vim就有可能會轉換編碼。開啟已有檔案時會從檔案編碼轉換到 encoding所設定的編碼;儲存檔案時會從encoding設定的編碼轉換到fileencoding對應的編碼。經常會看到Vim提示[已轉換],這是表明Vim內部作了編碼轉換。終端環境下使用Vim,會從termencoding設定的編碼轉換到encoding設定的編碼。
可以用|:help encoding-values|列出Vim支援的所有編碼。
4、具體應用環境的設定
- 只編輯GBK編碼的檔案
set fileencodings=cp936
set fileencoding=cp936
set encoding=cp936
- 只編輯UTF-8編碼的中文檔案
set fileencodings=utf-8
set fileencoding=utf-8
set encoding=cp936 或者 set encoding=utf-8
- 同時支援GBK和UTF-8編碼
set fileencodings=ucs-bom,utf-8,cp936
set fileencoding=utf-8
set encoding=cp936 或者 set encoding=utf-8
- 如果在終端環境下使用Vim,需要設定termencoding和終端所使用的編碼一致。例如:
set termencoding=cp936 或者 set termencoding=utf-8
Windows記事本編輯UTF-8編碼檔案時會在檔案頭上加上三個位元組的BOM:EFBBBF。如果fileencodings中設 置ucs-bom的目的就是為了能夠相容用記事本編輯的檔案,不需要的話可以去掉。Vim在儲存UTF-8編碼的檔案時會去掉BOM。去掉BOM的最大好 處是在Unix下能夠使用cat a b>c來正確合併檔案,這點經常被忽略。
5、FAQ
- 為什麼在Vim中一次只能刪除半個漢字?
因為encoding設定錯誤,把encoding設定為cp936就可以解決此問題。在Unix環境下Vim會根據locale來設定預設的encoding,如果沒有正確設定locale並且沒有設定encoding就會一次只能刪除半個漢字。
- VIM為什麼不能輸入繁體字?
把euc-cn或者GB2312改為cp936就可以了。euc-cn是GB2312的別名,不支援繁體漢字。cp936是GBK的別名,是GB2312的超集,可以支援繁體漢字。
- VIM為什麼提示不能轉換?
因為在編譯Vim時沒有加入iconv選項,重新編譯Vim才能解決。
- 如何開啟一個GBK編碼的檔案並另存為UTf-8編碼?
儲存檔案時執行命令|:set fileencoding=utf-8|就可以了。
相關文章
- cat開啟檔案正常vim開啟檔案中文亂碼解決方法
- cat中文正常vim中文亂碼怎麼解決?
- vim 開啟中文亂碼
- ubuntu中文顯示亂碼解決辦法Ubuntu
- git操作時中文顯示亂碼的解決方法Git
- 解決MySQL中文亂碼和插入中文不顯示的方法MySql
- windows10每次開啟軟體都要顯示應用商店的解決方法Windows
- centos7 vim中文亂碼解決方法CentOS
- LiveCharts中文顯示亂碼問題的解決Echarts
- win10應用程式漢字亂碼怎麼辦_win10開啟應用程式亂碼的解決方法Win10
- excel開啟csv中文亂碼Excel
- windows10系統下應用程式中文亂碼的解決方法Windows
- navicat for mysql顯示中文亂碼解決方案MySql
- office正在更新無法正常啟動如何修復_office顯示正在更新無法開啟解決方法
- 未能開啟文稿,文字編碼不適用,Mac無法開啟txt文件的解決方法Mac
- Excel開啟CSV檔案出現亂碼怎麼辦?Excel開啟csv檔案出現亂碼的解決方法Excel
- 解決了一個困擾我近一年的vim顯示中文亂碼的問題
- 記錄 Ubuntu18.04 中文亂碼,解決方法Ubuntu
- 開啟儲存的網頁顯示英文和數字的解決方法網頁
- Redis中文顯示為Unicode編碼 亂碼的解決辦法RedisUnicode
- matplotlib 圖示 中文亂碼, 與 wordcloud 詞雲圖 中文亂碼 解決方法Cloud
- Zabbix圖表顯示中文亂碼解決辦法
- 解決ssh連線CentOS後中文顯示亂碼CentOS
- 解決Hive使用desc顯示中文註釋亂碼Hive
- windows10系統顯示串列埠開啟失敗的解決方法Windows串列埠
- win10 libreoffice開啟csv檔案中文亂碼怎麼解決Win10
- Win10系統下啟用或關閉windows功能開啟後顯示空白如何解決Win10Windows
- 解決關於IIS gzip不能正常啟用的問題
- 網速流量顯示:NetWorker Pro中文啟用版
- win10系統下音量圖示無法開啟的解決方法Win10
- 解決excel開啟.csv檔案亂碼問題Excel
- Excel開啟csv檔案出現亂碼的解決辦法Excel
- 生僻字顯示?的字元亂碼解決字元
- qt下使用qwebview開啟網頁不顯示JPEG圖片的解決辦法QTWebView網頁
- Windows XP電腦開機出錯無法正常啟動的解決方法Windows
- Magic Battery 啟用版中文 for Mac 電量顯示工具BATMac
- iStat Menus中文啟用版下載 iStat Menus 最新啟用碼分享
- win10系統下總提示需要新應用開啟此ymsgr的解決方法Win10
- excel開啟不顯示win10怎麼辦_ excel開啟不顯示win10的修復方法ExcelWin10