日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

vim 中乱码问题

發布時間:2025/5/22 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vim 中乱码问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在Linux下開發,經常遇到亂碼問題:shell或者vim中顯示不了中文,或者能夠顯示,但不能輸入中文。每次都是上網去搜,或者同事告訴我一些命令來解決的。一直沒有理解為什么會出亂碼,本文就是想認真分析亂碼問題的原因并找到解決之道。希望本文能夠解決像我這樣的菜鳥在Linux下shell和vim中遇到的亂碼問題。讀者們如果讀完這篇文章后還是一頭霧水,也不要著急[文章角度不同,不同的人的理解程度也不同],可以多看看類似的文章[文末的參考資料],等多遇到幾次編碼的問題,回頭再看看這些文章,基本就明白了。可以結合這篇文章一起看?關于Unicode,字符集,字符編碼,每個程序員都應該知道的事

基本概念

首先得有一些背景概念需要理解一下:

字符[character]

字符代表了字母表中的字符,標點符號和其他的一些符號。在計算機中,文本是由字符組成的。

字符集合[character set]

由一套用于特定用途的字符組成,例如支持西歐語言的字符集合,支持中文的字符集合。字符集合只定義了符號和他們的語意,其實跟計算機沒有直接關系。

現實生活中,不同的語系有自己的字符集合,例如藏文有自己的字符集合,漢文有自己的字符集合。到計算機的世界中,也有各種字符集合,例如ASCII字符集合,GB2312字符集合,GBK字符集合。還有一個其他字符集合的超集--Unicode字符集定義了幾乎絕大部分現存語言需要的字符,是一種通用的字符集,來支持多語言環境(可以同時處理多種語言混合的情況)。各個國家和地區在制定編碼標準的時候,“字符集合”和“字符編碼”一般都是同時制定的。所以像ASCII字符集合一樣,它也同時代表了一種字符的編碼。

字符編碼[character encoding]

是一套規則,定義了在計算機內存中如何表示字符,是字符集中的每個字符與計算機內存中字節之間的轉換關系,也可以認為是把字符數字化,規定每個“字符”分別用一個字節還是多個字節存儲,用哪些字節來存儲。例如ASCII編碼[你沒看錯,它既是一種字符集合,也是一種字符編碼],定義了英文字母和符號在計算機中的表示方式,是用一個字節來表示。Unicode字符集合,有好幾種字符編碼方式,例如變長度編碼的UTF8,UTF16等。中文字符集也有很多字符編碼,例如上文提到的GB2312編碼,GBK編碼等。

知乎上的這篇介紹字符編碼,字體,iconv的文章很贊,內容淺顯易懂。還有一篇很有名的有關Unicode和字符集的文章可以看看:The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!),網上有中文版。

之所以產生亂碼,是因為顯示的時候使用的字符編碼方式和實際內容的字符編碼不一致。就跟上文知乎上那個帖子里的小姑娘和小男孩的例子一樣,顯示所用的字符編碼和實際內容的字符編碼方式不一致,自然就看不懂對方寫的是啥。所以想正確顯示內容,有兩個方法:

1. 統一一下,雙方都使用同一種編碼方式。 2. 把對方的內容轉換成跟自己的編碼方式一致的內容??梢杂妙愃?iconv 這樣的工具來完成

其次,還需要了解Linux系統中的這個東東:

語系locale

可以通過命令:?locale -a?來顯示當前Linux系統支持的所有的語言環境。關于locale,強烈推薦看看Locale 詳解,然后搞明白以下三個環境變量的優先級:LC_ALL>LC_*>LANG。locale相關的各個環境變量的作用參見這里。

亂碼實戰

有了以上的知識儲備,就可以解決以下問題了:

登錄終端中顯示的亂碼問題

用ssh客戶端putty/securecrt 登錄遠程Linux服務器舉例子:

要顯示中文,首先確保bash中設置的語系是支持中文的,例如采用zh_CN.UTF8編碼。可以簡單的使用命令:export LANG=zh_CN.UTF8?來設置。如果此時putty中中文仍然是亂碼,說明putty自身設置的編碼跟剛才設置LANG的編碼方式不一樣,把putty中的編碼方式改成UTF8。之后就可以顯示并輸入中文了。 如果你用的是bash,可以在~/.bashrc?配置文件中加入上述的命令。這樣就不用每次登錄后手動設置系統編碼了。

vim中顯示的亂碼問題

在vim中,有以下幾個環境變量要理解[可以在vim中使用 :help 關鍵詞 來查看文檔]:

1. termencodingEncoding used for the terminal. This specifies what character encoding the keyboard produces and the display will understand. For the GUI it only applies to the keyboard. 終端使用的編碼方式,指定了鍵盤輸出的編碼格式和屏幕能夠正常顯示的編碼方式 2. encoding Sets the character encoding used inside Vim. It applies to text in the buffers, registers, Strings in expressions, text stored in the vim info file, etc. Changing this option will not change the encoding of the existing text in vim. The character encoding of files can be different from 'encoding'. This is specified with 'file encoding'. The conversion is done with icon() or as specified with ‘charconvert' 設置了vim內部緩沖區、寄存器、表達式等中存儲的文本的編碼方式。它與文件的編碼 [ fileencoding ] 可以是不一樣的。如果不一樣,中間會經過iconv 轉換 如果工作用的編碼中含有無法轉換為內部編碼的字符,在這些字符就會丟失。因此,在選擇 Vim 的內部編碼的時候,一定要使用一種表現能力足夠強的編碼,例如UTF8,以免影響正常工作。 3. fileencoding Sets the character encoding for the file of this buffer. When 'file encoding' is different from 'encoding', conversion will be done when reading and writing the file.文件自身的編碼方式。如果fileencoding和encoding不一致,那么在讀取和寫入文件時,會對編碼方式進行轉換。 通過打開文件后設置 fileencoding,我們可以將文件由一種編碼轉換為另一種編碼 4. fileencodings This is a list of character encodings considered when starting to edit an existing file. When a file is read, Vim tries to use the first mentioned character encoding. If an error is detected, the next one in the list is tried. When an encoding is found that works, 'file encoding' is set to it. If all fail, 'file encoding' is set to an empty string, which means the value of 'encoding' is used. Note that 'fileencodings' is not used for a new file, the global value of 'file encoding' is used instead. 是一個字符編碼的列表。當vim打開一個文件時,會嘗試使用列表中的第一個字符編碼方式。如果檢測到錯誤,就用列表中的下一個。當找到一個可以正常工作的字符編碼方式后,file encoding就被設置成找到的字符編碼方式。如果最后都失敗了,fileencoding就被設置成空的,這意味者字符的編碼方式就跟 encoding變量的值一樣了。 這樣通過這個列表,Vim可以自動判斷文件的編碼,自動判斷失敗時還可手動設定 fileencoding 來指定編碼。因此,設置 fileencodings 的時候,一定要把要求嚴格的、當文件不是這個編碼的時候更容易出現解碼失敗的編碼方式放在前面,把寬松的編碼方式放在后面。

當vim中遇到亂碼時,基本都是由于vim沒有能夠正確地識別出文件的編碼導致的。

首先保證終端里可以正常顯示中文,然后使用命令?:set fileencoding=GBK?來設置vim中此文件的正確編碼??梢允褂妹?:set fileencoding?查看vim識別出的文件編碼。

轉載于:https://www.cnblogs.com/wang985850293/p/5623918.html

總結

以上是生活随笔為你收集整理的vim 中乱码问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。