VIMによる符号化変換


環境:windows xp
ツール:GVIMメモ帳

フォーマット変換手順


前言:windowsのデフォルト符号化はcp 936、simplified Chinese(Windows only)、gvimのオプションencodingのデフォルトはcp 936です.
参照:vimにおけるencoding fileencodingとfileencodingsの違い
1、ANSI形式をUTF-8に変換する
新しいメモ帳をtest_と名付けますencoding.txtは、「こんにちは、これはUTF-8とANSIフォーマットの変換の例で、windowsではcp 936がANSIを表しています」と入力します.
gvimでこのtest_を開くencoding.txtは、上記の言葉が正常に表示されているはずです.
:set encoding
上記の言葉はVIM内部で使用されている符号化フォーマットを表示することです.windowsではgvimのデフォルトはcp 936です.上記のコマンドで見た結果はencoding=cp 936であるはずです.
:set fileencoding=UTF-8
:set wq!
ファイルをUTF-8としてエンコードし、保存終了します.
Windows手帳でこのファイルの符号化フォーマットを確認します.メモ帳でこのファイルを開き、ファイル-->名前を付けて保存します.ポップアップの[名前を付けて保存](Save As)ダイアログボックスで、一番下の符号化にはUTF-8が表示されます.これは、このファイルがUTF-8で符号化されていることを示します.
2、UTF-8をANSIに変換する
先ほどUTF-8形式に変換されたファイルをGVIMで開くと、8割が文字化けして見えますが、これはfilencodingsの設定と関係があります.
:set encoding
で得られた結果は私の機械ではcp 936です.ファイルコードはUTF-8なので文字化けします
:set encoding=UTF-8
GVIM内部使用符号化フォーマットがUTF-8に設定されているので、端末インタフェースは文字化けではなく、正常に表示されるはずです.
:set fileencoding=cp936
;wq!
ファイルコードがcp 936であることを設定し、保存して終了すると、ファイルコードはansiになります.注意:encodingとfilencodingが異なる場合、ファイル符号化は保存時に変換されます.したがって、set encoding=UTF-8というコマンドは実行されます.

ネットワーク上のvimにおけるenconding,fileencoding,fileencodingsの解釈


vim符号化方式の設定
すべてのポピュラーテキストエディタと同様に、VimはUCS-2、UTF-8などのポピュラーなUnicode符号化方式を含む様々な文字符号化ファイルをよく編集することができます.しかし残念なことに、Linuxの世界から多くのソフトウェアと同じように、自分で設定する必要があります.
Vimには、encoding、filencoding、filencoding、filencoding、termencodingの4つのオプションがあります(これらのオプションの可能な値は、Vimオンラインヘルプ:help encoding-namesを参照してください).
*encoding:Vimのbuffer(バッファ)、メニューテキスト、メッセージテキストなど、Vim内部で使用される文字符号化方式.デフォルトはあなたのlocaleによって選択されます.ユーザーマニュアルでは推奨は.vimrcでその値を変えるのは、実際にはそうではないようだ.vimrcでその値を変えることこそ意味がある.あなたのvimのencodingがutf-8であるように、編集されたファイルはcp 936符号化を採用し、vimは自動的に読み込んだファイルをutf-8(vimの読み取り可能な方法)に変換し、ファイルに書き込むと自動的にcp 936(ファイルの保存符号化)に戻ることができます.
*filencoding:Vimで現在編集されているファイルの文字符号化方式で、Vimがファイルを保存する際にもこのような文字符号化方式としてファイルが保存されます(新しいファイルの有無にかかわらず).
*fileencodings:Vimは自動的にfileencodingの順序リストを検出し、起動時にリストされた文字符号化方式に従って開くファイルの文字符号化方式を逐一検出し、fileencodingを最終的に検出される文字符号化方式に設定する.そのためUnicode符号化方式をこのリストの一番前に、ラテン語系符号化方式latin 1を一番後ろに置くことが望ましい.
*termencoding:Vimが動作する端末(またはWindowsのConsoleウィンドウ)の文字符号化方式.vimが存在するtermがvim符号化と同じである場合、設定する必要はありません.そうでなければvimのtermencodingオプションでtermの符号化に自動的に変換できます.このオプションはWindowsでよく使用されるGUIモードのgVimには無効ですが、ConsoleモードのVimにとってWindowsコンソールのコードページであり、通常は変更する必要はありません.
では、初心者を混乱させやすいパラメータの山を説明しました.Vimのマルチ文字符号化方式のサポートがどのように機能しているかを見てみましょう.
1.Vim起動、根拠.vimrcで設定したencodingの値はbuffer、メニューテキスト、メッセージ文の文字符号化方式を設定します.
2.編集するファイルを読み出し、filencodingsにリストされている文字符号化方式に従ってファイル符号化方式を逐一検出する.filencodingを検出するように設定し、正しい(注1)文字符号化方式に見えます.
3.filencodingとencodingの値を比較し、異なる場合はiconvを呼び出してファイル内容をencodingで記述された文字符号化方式に変換し、変換された内容をこのファイルに開いたbufferに入れると、このファイルの編集を開始できます.このステップを完了するには、外部のiconvを呼び出す必要がある.dll(注2)、このファイルが$VIMRUNTIMEまたはPATH環境変数にリストされている他のディレクトリに存在することを保証する必要があります.
4.編集が完了してファイルを保存するときは、filencodingとencodingの値を再度比較します.異なる場合は、iconvを再度呼び出して、保存するbufferのテキストをfilencodingで説明した文字符号化方式に変換し、指定したファイルに保存します.同様にiconvを呼び出す必要があります.dll Unicodeはほとんどの言語の文字を含むことができ、UnicodeのUTF-8符号化方式は非常に性価比のある符号化方式(UCS-2よりも空間消費が小さい)であるため、encodingの値はutf-8に設定することを推奨する.もう一つの理由は、encodingがutf-8に設定されている場合、Vim自動検出ファイルの符号化方式がより正確になるからです(この理由が主なのかもしれません).私たちが中国語Windowsで編集したファイルは、他のソフトウェアとの互換性を両立させるために、ファイルコードはGB 2312/GBKに設定するのが適切なので、filencodingはchinese(chineseは別名で、Unixではgb 2312、Windowsではcp 936、つまりGBKのコードページ)に設定することをお勧めします.

VIMヘルプドキュメントのファイル符号化変換の解釈


    When 'fileencoding' is different from 'encoding', conversion will be     done when writing the file.  For reading see below.     When 'fileencoding' is empty, the same value as 'encoding' will be     used (no conversion when reading or writing a file).     Conversion will also be done when 'encoding' and 'fileencoding' are     both a Unicode encoding and 'fileencoding' is not utf-8.  That's     because internally Unicode is always stored as utf-8.