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

斜樹的空間

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

  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 張貴川 閱讀(585) 評論(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>
            欧美日韩天堂| 在线播放中文一区| 亚洲综合成人婷婷小说| 一区二区三区欧美在线观看| 亚洲国产精品一区二区尤物区| 久久精品国产免费看久久精品| 欧美一区二区性| 久久aⅴ国产紧身牛仔裤| 久久成人在线| 在线视频一区观看| 亚洲五月六月| 久久久精品日韩| 久久午夜色播影院免费高清| 欧美成人有码| 亚洲一区二区三区影院| 久久深夜福利免费观看| 欧美日韩国产成人在线| 国产美女精品视频免费观看| 在线观看一区| 亚洲欧美日韩在线观看a三区| 久热精品视频在线观看| 亚洲精品国产视频| 欧美在线一区二区| 久久亚洲综合色一区二区三区| 99这里只有久久精品视频| 国产日韩精品在线观看| 亚洲国产一区二区三区在线播 | 午夜精品久久久久久久白皮肤 | 一本色道久久综合亚洲精品不| 亚洲视频一区| 欧美xx视频| 亚洲男人av电影| 欧美国产日韩一二三区| 国产视频一区欧美| 一区二区三区精品久久久| 噜噜噜91成人网| 亚洲嫩草精品久久| 欧美日韩麻豆| 亚洲欧洲一区二区在线观看| 久久精品国产综合| 一区二区欧美在线观看| 欧美激情一区二区三区| 在线观看三级视频欧美| 欧美伊人久久久久久午夜久久久久 | 欧美在线观看一二区| 欧美小视频在线| 9i看片成人免费高清| 欧美不卡福利| 久久国产天堂福利天堂| 国产精品日韩在线| 亚洲永久免费视频| 日韩视频永久免费观看| 久久久亚洲精品一区二区三区 | 欧美一区二区三区免费观看| 欧美视频一区二区三区在线观看 | 亚洲一区二区成人在线观看| 欧美国产视频一区二区| 久久久亚洲国产美女国产盗摄| 国产一区日韩二区欧美三区| 久久精品国产精品亚洲综合| 亚洲欧美成人| 国产亚洲成av人在线观看导航| 欧美在线观看www| 亚洲欧美日韩精品久久久久| 国产欧美精品一区aⅴ影院| 欧美一级视频精品观看| 午夜精品亚洲| 一区二区三区在线观看国产| 玖玖玖国产精品| 久热国产精品视频| 日韩视频精品在线| 99精品欧美一区二区三区| 一区二区三区波多野结衣在线观看| 亚洲国产一区二区三区青草影视| 欧美成人精品在线观看| 亚洲美女性视频| 中文av一区特黄| 国产精品一区二区在线观看不卡 | 亚洲激情中文1区| 欧美人成免费网站| 先锋影音一区二区三区| 久久激情一区| 日韩一级大片| 香港久久久电影| 亚洲人成网站色ww在线| 日韩亚洲欧美成人一区| 国产伦精品一区二区三区高清版| 久久―日本道色综合久久| 欧美成人精品一区二区三区| 亚洲影院在线观看| 久久一区二区三区四区五区| 亚洲视频自拍偷拍| 欧美综合第一页| 一区二区日本视频| 久久精品免费播放| 99re66热这里只有精品3直播| 亚洲一级在线| 亚洲精品国产精品乱码不99| 亚洲欧美日韩精品在线| 亚洲精品欧美日韩专区| 欧美一区二区三区喷汁尤物| 日韩亚洲欧美成人| 久久婷婷丁香| 亚洲欧美在线网| 欧美jizzhd精品欧美巨大免费| 午夜一区二区三区在线观看| 欧美风情在线观看| 玖玖精品视频| 国产一区二区你懂的| 99www免费人成精品| 亚洲国产国产亚洲一二三| 亚洲一区二区三区午夜| 日韩一级精品视频在线观看| 欧美一区二区三区在线免费观看| 亚洲网站视频福利| 欧美国产日韩一区| 亚洲电影欧美电影有声小说| 狠狠色综合播放一区二区| 亚洲男人的天堂在线观看| 亚洲一区二区三区中文字幕| 欧美激情偷拍| 亚洲国产一区二区精品专区| 亚洲激情在线观看| 久久综合给合久久狠狠狠97色69| 久久久99精品免费观看不卡| 国产精品自在欧美一区| 亚洲线精品一区二区三区八戒| 中文高清一区| 欧美午夜视频在线| 一本色道久久综合| 亚洲性视频h| 国产精品ⅴa在线观看h| 日韩亚洲国产欧美| 亚洲一级二级在线| 国产精品久久久久久av福利软件| 一二美女精品欧洲| 亚洲欧美中日韩| 免播放器亚洲| 亚洲福利av| 久久综合九色综合欧美狠狠| 快播亚洲色图| 亚洲丶国产丶欧美一区二区三区| 久久久久久久久一区二区| 毛片基地黄久久久久久天堂| 伊人色综合久久天天| 久久久久久久久久码影片| 免费在线看一区| 91久久国产精品91久久性色| 免费看精品久久片| 亚洲国产高清视频| av成人老司机| 国产精品免费在线| 欧美在线欧美在线| 欧美激情成人在线视频| 99热在这里有精品免费| 国产精品videossex久久发布| 亚洲一区视频在线| 免费日韩成人| 99这里只有久久精品视频| 国产精品一区二区三区观看| 久久久999成人| 亚洲欧洲日本mm| 欧美亚洲一区在线| 亚洲成人直播| 欧美性开放视频| 久久久成人精品| 日韩视频二区| 久久久久国产精品一区三寸| 亚洲黄色成人| 国产精品一卡二| 榴莲视频成人在线观看| 一本色道久久综合狠狠躁的推荐| 久久精品国产精品亚洲精品| 亚洲精品视频免费观看| 国产精品自在在线| 欧美国产第一页| 先锋a资源在线看亚洲| 亚洲激情第一页| 久久婷婷久久| 亚洲午夜精品视频| 亚洲高清免费视频| 国产嫩草一区二区三区在线观看| 嫩草影视亚洲| 欧美专区在线| 亚洲欧美国产三级| 亚洲精选视频免费看| 免费毛片一区二区三区久久久| 亚洲女爱视频在线| 亚洲另类一区二区| 在线观看视频一区| 国产欧美日韩在线视频| 欧美日韩国产成人在线| 免费视频一区| 久久成人人人人精品欧| 亚洲一区影院| 中国女人久久久| 日韩亚洲综合在线| 亚洲激情在线观看| 亚洲第一精品在线| 欧美顶级大胆免费视频|