fileencodingを変更する場合に日本語の文字化けを避ける方法

例えばeuc-jpで書かれているファイルのfileencodingをutf-8に変更したい場合、

:e ++enc=utf-8

とやってutf-8で開いた後、保存をすれば良い。


ただし、当然ながら日本語は文字コードが合わず文字化けしてしまう。

  1 #include <stdio.h>
  2 
  3 int main()
  4 { 
  5     printf("僕らの隊長は最高だ!");
  6     return 0;
  7 }

これが

  1 #include <stdio.h>
  2 
  3 int main()
  4 { 
  5     printf("?&#868;?????&#313;?&#1018;&#505;??
  6     return 0;
  7 }

こうなる。

iconv等を使って変更しても良いが、vimを開いたまま文字化けを回避する方法があるので紹介。

ggVGd:w<CR>:e ++enc=utf-8<CR>p:w<CR>

これでおk。

詳細に書くと、

ggVG               "ファイル全体を選択
d                  "選択範囲(ファイル全体)をカット
:w<CR>             "保存
:e ++enc=utf-8<CR> "utf-8で開く
p                  "ペースト
:w<CR>             "再度保存

一度yankバッファに退避させておくと、変更後のencodingでペーストくれるので新規ファイルで書き始めたソースが途中でeuc-jpで書いてることに気付いたときとか便利です。

でかいファイルの場合重いので、他の方法のが良いかも。


んー、別の方法がありそうな予感!