亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》
  • 首頁 > 
  • 教程 > 
  • 服務器 > 
  • Vim中文件編碼處理與重新打開亂碼文件的示例分析

Vim中文件編碼處理與重新打開亂碼文件的示例分析

發布時間:2021-07-21 10:19:00 來源:億速云 閱讀:182 作者:小新 欄目:服務器

這篇文章主要介紹了Vim中文件編碼處理與重新打開亂碼文件的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

前言

Vim 中有兩個與編碼有關的變量,如果理解了基本就不會再為編碼問題頭疼了。

  • encoding  :Vim 內部編碼,例如 buffer、寄存器、文本等。這個值一般用戶不要設置,另外打開 Vim 之后再設置這個值也是沒有意義的。大家可以將這個值看作是 Vim 程序自己的變量,如果在工作中遇到文件的編碼問題,和 encoding  這個變量是萬萬沒有關系的。

  • fileencoding  :顧名思義了,就是文件的編碼。

此外還有一個值,叫 fileencodings 是個復數。一般我們將這個值在 vimrc 中設置,Vim 打開一個文件的時候回根據 fileencodings 里面設置的順序來猜測文件的編碼。比如這樣設置:

set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1

那么有時候 Vim 猜錯了,打開的文件顯示亂碼怎么辦呢?(ps:通常 Vim 打開文件的時候亂碼是因為你的 fileencodings 里面沒有寫某個編碼,所以 Vim 沒有猜對。例如從上面的設置中刪掉 gb18030 ,那么打開這種編碼的文件的時候你會發現 fileencoding 的值是 latin1 ,而文件的顯示是亂碼)

這時候你可能想到設置 fileencoding 的值,但是此時我們的文件已經打開了,你設置后會發現 Vim buffer 的狀態變成了 Edited 。而文件依然顯示亂碼,沒有變化。具體的原因后文會詳細解釋。

正確的做法是 以特定編碼重新打開文件 ,例如在 Vim 中使用重新打開命令 :e ++enc=gb2312 ,其中 ++enc 是一個選項,可以指定使用的編碼。打開后你會發現 Vim 按照你指定的形式打開了文件,但是文件變成了 readonly 狀態,如果要修改,設置 :set noreadonly 就好。

其實原理有點像 Python 里面有人提出的 三明治模型 :

Vim中文件編碼處理與重新打開亂碼文件的示例分析

Python 在從流(例如網絡, 文件 I/O 的時候),拿到的是 bytes ,通過 decode() 變成 str 而 Vim 在讀入一個文件的時候,根據 fileencoding (用戶設置的或者通過 fileencodings 猜測,將其轉換成內部  encoding 的編碼方式。

Python 在寫入文件的時候,用 encode() 變成 bytes 再寫。而 Vim 從 buffer 寫到文件的時候,也是將數據從內部的 encoding 轉換成 fileencoding 再寫入。

這也就解釋了為什么亂碼的時候在 Vim 中修改 fileencoding 沒什么卵用。

因為在打開文件之后設置 fileencoding 的值不會改變已經載入到 Vim buffer 中的數據,此時的數據已經是轉換完成了的,這個設置只會改變寫入的時候使用目前的 fileencoding 來寫入,所以總結起來就是“打開文件使用了一個編碼,寫入文件的時候使用了另一個編碼”。

而對亂碼正確的需求應該是:我想要以特定的編碼形式打開這個文件。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Vim中文件編碼處理與重新打開亂碼文件的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

vim
AI

鹤峰县| 阿瓦提县| 辽阳县| 铜鼓县| 紫阳县| 桃江县| 赣州市| 嘉鱼县| 原阳县| 南开区| 株洲县| 涞水县| 花莲市| 绥芬河市| 茂名市| 土默特左旗| 庆元县| 孝感市| 大埔区| 栾城县| 出国| 上杭县| 汉寿县| 保定市| 牙克石市| 鹿泉市| 苍梧县| 尚义县| 黑水县| 红原县| 闻喜县| 康定县| 义马市| 法库县| 双鸭山市| 项城市| 宜宾市| 紫金县| 盐山县| 旺苍县| 梓潼县|