青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

斜樹的空間

集中精力,放棄一切的去做一件事情,只要盡力了,即使失敗了,你也不會后悔!

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  47 隨筆 :: 0 文章 :: 12 評論 :: 0 Trackbacks
#TITLE: VIM 文件編碼識別與亂碼處理
 
edyfox

在 Vim 中,
有四個與編碼有關的選項,
它們是:
''fileencodings''、
''fileencoding''、
''encoding'' 和 ''termencoding''。
在實際使用中,
任何一個選項出現錯誤,
都會導致出現亂碼。
因此,
每一個 Vim 用戶都應該明確這四個選項的含義。
下面,
我們詳細介紹一下這四個選項的含義和作用。
* encoding

''encoding'' 是 Vim 內部使用的字符編碼方式。
當我們設置了 ''encoding'' 之后,
Vim 內部所有的 buffer、
寄存器、
腳本中的字符串等,
全都使用這個編碼。
Vim 在工作的時候,
如果編碼方式與它的內部編碼不一致,
它會先把編碼轉換成內部編碼。
如果工作用的編碼中含有無法轉換為內部編碼的字符,
在這些字符就會丟失。
因此,在選擇 Vim 的內部編碼的時候,
一定要使用一種表現能力足夠強的編碼,
以免影響正常工作。

由于 ''encoding'' 選項涉及到 Vim 中所有字符的內部表示,
因此只能在 Vim 啟動的時候設置一次。
在 Vim 工作過程中修改 ''encoding'' 會造成非常多的問題。
如果沒有特別的理由,
請始終將 ''encoding'' 設置為 ''utf-8''。
為了避免在非 UTF-8 的系統如 Windows 下,
菜單和系統提示出現亂碼,
可同時做這幾項設置:

#Code syntax=" vim" < < ---
set encoding=utf-8
set langmenu=zh_CN.UTF-8
language message zh_CN.UTF-8
* termencoding

''termencoding'' 是 Vim 用于屏幕顯示的編碼,
在顯示的時候,
Vim 會把內部編碼轉換為屏幕編碼,
再用于輸出。
內部編碼中含有無法轉換為屏幕編碼的字符時,
該字符會變成問號,
但不會影響對它的編輯操作。
如果 ''termencoding'' 沒有設置,
則直接使用 ''encoding'' 不進行轉換。

舉個例子,
當你在 Windows 下通過 telnet 登錄 Linux 工作站時,
由于 Windows 的 telnet 是 GBK 編碼的,
而 Linux 下使用 UTF-8 編碼,
你在 telnet 下的 Vim 中就會亂碼。
此時有兩種消除亂碼的方式:
一是把 Vim 的 ''encoding'' 改為 ''gbk'',
另一種方法是保持 ''encoding'' 為 ''utf-8'',
把 ''termencoding'' 改為 ''gbk'',
讓 Vim 在顯示的時候轉碼。
顯然,
使用前一種方法時,
如果遇到編輯的文件中含有 GBK 無法表示的字符時,
這些字符就會丟失。
但如果使用后一種方法,
雖然由于終端所限,
這些字符無法顯示,
但在編輯過程中這些字符是不會丟失的。

對于圖形界面下的 GVim,
它的顯示不依賴 TERM,
因此 ''termencoding'' 對于它沒有意義。
在 GTK2 下的 GVim 中,
''termencoding'' 永遠是 ''utf-8'',
并且不能修改。
而 Windows 下的 GVim 則忽略 ''termencoding'' 的存在。

* fileencoding

當 Vim 從磁盤上讀取文件的時候,
會對文件的編碼進行探測。
如果文件的編碼方式和 Vim 的內部編碼方式不同,
Vim 就會對編碼進行轉換。
轉換完畢后,
Vim 會將 ''fileencoding'' 選項設置為文件的編碼。
當 Vim 存盤的時候,
如果 ''encoding'' 和 ''fileencoding'' 不一樣,
Vim 就會進行編碼轉換。
因此,
通過打開文件后設置 ''fileencoding'',
我們可以將文件由一種編碼轉換為另一種編碼。
但是,
由前面的介紹可以看出,
''fileencoding'' 是在打開文件的時候,
由 Vim 進行探測后自動設置的。
因此,
如果出現亂碼,
我們無法通過在打開文件后重新設置 ''fileencoding'' 來糾正亂碼。

* fileencodings

編碼的自動識別是通過設置 fileencodings 實現的,
注意是復數形式。
fileencodings 是一個用逗號分隔的列表,
列表中的每一項是一種編碼的名稱。
當我們打開文件的時候,
VIM 按順序使用 fileencodings 中的編碼進行嘗試解碼,
如果成功的話,
就使用該編碼方式進行解碼,
并將 ''fileencoding'' 設置為這個值,
如果失敗的話,
就繼續試驗下一個編碼。

因此,
我們在設置 ''fileencodings'' 的時候,
一定要把要求嚴格的、
當文件不是這個編碼的時候更容易出現解碼失敗的編碼方式放在前面,
把寬松的編碼方式放在后面。

例如,
latin1 是一種非常寬松的編碼方式,
任何一種編碼方式得到的文本,
用 latin1 進行解碼,
都不會發生解碼失敗
--
當然,
解碼得到的結果自然也就是理所當然的“亂碼”。
因此,
如果你把 ''latin1'' 放到了 ''fileencodings'' 的第一位的話,
打開任何中文文件都是亂碼也就是理所當然的了。

以下是滇狐推薦的一個 ''fileencodings'' 設置:

#Code syntax=" vim" < < ---
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
---

其中,
ucs-bom 是一種非常嚴格的編碼,
非該編碼的文件幾乎沒有可能被誤判為 ucs-bom,
因此放在第一位。

utf-8 也相當嚴格,
除了很短的文件外
(例如許多人津津樂道的 GBK 編碼的“聯通”被誤判為 UTF-8 編碼的經典錯誤),
現實生活中一般文件是幾乎不可能被誤判的,
因此放在第二位。

接下來是 cp936 和 gb18030,
這兩種編碼相對寬松,
如果放前面的話,
會出現大量誤判,
所以就讓它們靠后一些。
cp936 的編碼空間比 gb18030 小,
所以把 cp936 放在 gb18030 前面。

至于 big5、euc-jp 和 euc-kr,
它們的嚴格程度和 cp936 差不多,
把它們放在后面,
在編輯這些編碼的文件的時候必然出現大量誤判,
但這是 Vim 內置編碼探測機制沒有辦法解決的事。
由于中國用戶很少有機會編輯這些編碼的文件,
因此我們還是決定把 cp936 和 gb18030 前提以保證這些編碼的識別。

最后就是 latin1 了。
它是一種極其寬松的編碼,
以至于我們不得不把它放在最后一位。
不過可惜的是,
當你碰到一個真的 latin1 編碼的文件時,
絕大部分情況下,
它沒有機會 fall-back 到 latin1,
往往在前面的編碼中就被誤判了。
不過,
正如前面所說的,
中國用戶沒有太多機會接觸這樣的文件。

如果編碼被誤判了,
解碼后的結果就無法被人類識別,
于是我們就說,
這個文件亂碼了。
此時,
如果你知道這個文件的正確編碼的話,
可以把 ''fileencodings'' 改成只有這一種編碼,
阻止任何 fall-back 發生,
然后重新打開這個文件。

* fencview

根據前面的介紹,
我們知道,
通過 Vim 內置的編碼識別機制,
識別率是很低的,
尤其是對于簡體中文 (GBK/GB18030)、
繁體中文 (Big5)、
日文 (euc-jp)
和韓文 (euc-kr) 之間的識別。
而對于普通用戶而言,
肉眼看出一個文件的編碼方式也是很不現實的事情。
因此,
滇狐強烈推薦水木社區的 mbbill 開發的 fencview 插件。
該插件使用詞頻統計的方式識別編碼,
正確率非常高。
posted on 2011-04-12 07:28 張貴川 閱讀(586) 評論(0)  編輯 收藏 引用 所屬分類: 轉載
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲人在线视频| 久久综合狠狠综合久久综青草| 亚洲一区二区高清视频| 99国产精品国产精品久久| 亚洲第一精品久久忘忧草社区| 伊人色综合久久天天| 伊人久久av导航| 影音欧美亚洲| 亚洲乱码国产乱码精品精98午夜| 亚洲精品欧美日韩| 亚洲一区二区动漫| 久久蜜桃资源一区二区老牛| 欧美成人a视频| 日韩视频一区二区三区在线播放免费观看| 日韩一级二级三级| 亚洲欧美日韩精品久久亚洲区| 久久www免费人成看片高清| 久久久91精品国产一区二区精品| 久久阴道视频| 国产精品二区在线观看| 国产日本欧美在线观看| 亚洲黑丝一区二区| 午夜精品久久久久久久久久久久| 久久久久久久91| 亚洲国产婷婷| 亚洲美女区一区| 午夜视频久久久| 欧美成人嫩草网站| 国产欧美一区二区精品婷婷| 亚洲国产精品t66y| 香蕉免费一区二区三区在线观看| 久久久久一本一区二区青青蜜月| 亚洲一级二级在线| 久久中文字幕一区二区三区| 亚洲区欧美区| 久久精品99久久香蕉国产色戒| 欧美精品在线一区| 激情六月婷婷久久| 午夜精品亚洲一区二区三区嫩草| 欧美福利一区二区| 欧美一区日韩一区| 欧美性猛交xxxx乱大交蜜桃| 亚洲级视频在线观看免费1级| 欧美一区二区三区视频免费| 亚洲国产一区二区视频| 欧美一区二区精品| 欧美日韩日本国产亚洲在线| 亚洲国产精品专区久久| 久久久水蜜桃| 午夜精品久久久久久99热| 欧美日韩国产一区二区| 亚洲品质自拍| 男人的天堂亚洲| 久久久免费观看视频| 国产精品日韩欧美一区| 99精品福利视频| 亚洲国产精品毛片| 免费成人av在线看| 在线电影欧美日韩一区二区私密| 欧美一区二区三区喷汁尤物| 一本大道久久精品懂色aⅴ | 久久中文在线| 亚洲欧美激情四射在线日 | 中文国产一区| 欧美日韩亚洲不卡| 中文日韩在线| 宅男噜噜噜66一区二区| 国产精品va在线| 欧美伊人久久| 午夜在线精品偷拍| 国产亚洲毛片在线| 免费不卡在线观看| 欧美成人蜜桃| 亚洲一区在线播放| 亚洲在线播放| 国产亚洲一级高清| 免费视频一区二区三区在线观看| 久久夜色精品亚洲噜噜国产mv | 欧美黄色aaaa| 一区二区三区久久| 日韩香蕉视频| 国产欧美日韩专区发布| 久久婷婷一区| 午夜在线成人av| 亚洲欧洲久久| 国产精品高清在线| 久久精品91| 亚洲一区二区免费看| 国产免费成人| 欧美激情一区在线| 欧美日韩亚洲激情| 午夜一级久久| 久久综合伊人77777麻豆| 亚洲精品中文字幕有码专区| 一区二区三区高清视频在线观看| 国产日韩欧美| 亚洲电影一级黄| 国产精品久久久久毛片大屁完整版| 欧美在线啊v一区| 免费不卡视频| 久久国产毛片| 欧美日韩国产一区二区| 久久人人爽国产| 欧美视频一区二区三区| 欧美 日韩 国产一区二区在线视频 | 久久爱www久久做| 日韩亚洲视频| 久久精品视频在线看| 日韩午夜激情| 久久精品女人天堂| 亚洲一区二区视频在线观看| 久久久视频精品| 久久国产精品72免费观看| 欧美激情一区二区三区四区| 久久香蕉精品| 国产视频一区在线观看一区免费| 亚洲精品欧美激情| 亚洲国产欧美不卡在线观看| 性欧美暴力猛交69hd| 亚洲一区二区网站| 欧美高清在线视频观看不卡| 欧美一区二区三区久久精品 | 欧美午夜精品一区二区三区| 欧美高清视频一区| 国产一级揄自揄精品视频| 亚洲激情网址| 亚洲国产一成人久久精品| 欧美一级播放| 欧美综合激情网| 国产精品美女久久久久久2018 | 米奇777在线欧美播放| 国产日韩精品电影| 亚洲无线视频| 正在播放亚洲| 欧美日韩视频不卡| 欧美第一黄网免费网站| 亚洲成在线观看| 午夜精品久久久久久久久久久久 | 中文国产成人精品久久一| 欧美国产一区二区三区激情无套| 又紧又大又爽精品一区二区| 久久成人亚洲| 久久中文欧美| 激情成人av| 久久人人97超碰人人澡爱香蕉| 久久精品国产久精国产爱| 国产欧美精品久久| 午夜久久久久| 久久裸体艺术| 激情欧美日韩一区| 免费的成人av| 亚洲九九爱视频| 亚洲一区二区在| 国产精品一区=区| 欧美综合国产精品久久丁香| 老司机精品福利视频| 亚洲国产日韩欧美综合久久| 欧美国产一区二区| 亚洲一卡二卡三卡四卡五卡| 久久国产精品久久久久久电车| 很黄很黄激情成人| 欧美福利视频一区| 亚洲一区二区三区中文字幕在线| 欧美在线欧美在线| 亚洲国产精品ⅴa在线观看| 欧美精品不卡| 亚洲免费在线视频一区 二区| 久久亚洲高清| 91久久精品国产91性色tv| 欧美日韩在线一区二区| 欧美一二区视频| 亚洲人体大胆视频| 久久成人免费| 亚洲九九九在线观看| 国产精品www| 欧美在线一二三四区| 亚洲电影在线看| 欧美一区二区三区另类| 亚洲欧洲日本mm| 国产精品日韩精品欧美精品| 裸体一区二区三区| 午夜免费电影一区在线观看| 久久精品国产亚洲5555| 日韩一区二区久久| 国内精品免费在线观看| 欧美日韩一区二区三区在线 | 欧美主播一区二区三区| 亚洲三级影院| 国模精品娜娜一二三区| 欧美日本国产| 蜜臀99久久精品久久久久久软件| 夜夜精品视频一区二区| 亚洲电影有码| 蜜臀a∨国产成人精品| 性欧美video另类hd性玩具| 日韩视频在线免费观看| 狠狠色狠狠色综合| 国产麻豆综合| 国产精品日韩精品欧美在线 | 久久精品欧美日韩|