開発ブログ

WWWクリエイターズが送る、Git、CSS、HTML、コマンドライン、Macの便利機能など、開発に関する役立ち情報発信します。気まぐれに更新。

Vim:日本語の文字化けへの対応を攻略。もう怖くない!

最終更新:2017-08-09 by Joe

Vimの日本語文字化けへの対応方法をまとめました。

vimで日本語ドキュメントを開くたびにどきどきしていた自分。文字化けするんじゃないか、解決できなくてまたまごつくんじゃないか・・。そんな臆病な自分と決別するための記事です。

現在のvim文字コードを確認する

現在のvimの内部文字コードを認識します。「うわー、文字化けだ!」「うわー改行コードがアレだ!」という時は、慌てず騒がず、とりあえず状況を確認しましょう。

文字化けしている場合

現在のVIM文字コードを確認する

VIMでファイルを開いて、現在の文字コードを確認します。

# ファイルの文字コード確認
:set enc?

# 出力結果
encoding=utf-8

上記のような出力の場合、VIMとしてはutf-8で読み込んで表示しているので、エンコードの認識があわないとうまく表示されず、文字化けすることがあります。

windowsの人が保存したファイルは、sjisや、isoxxx、またサーバー環境によっては、euc-jpで保存されていたりするのです。

通常はVIMではファイル開く時にどのエンコードがなされているのか、自動判別が行われるのですが、文字化けしてしまうのは、何らかの理由でそれが失敗してしまった結果、という事が多いと思います。

ちなみに、vimマニュアルにも書いてありますが、もしenc?で「latin1」という値が帰ってきたら、ファイルを開く際の判別に失敗していると思って良いです。(かならずしもそうとは限らない。)

文字コードを指定して、ファイルを開き直す

さて、解決を試みます。

実際のファイル側の文字コードは、だれが最後にファイルを保存したかで、おおよそ察しがつくと思います。その文字コードを直接指定して、ファイルを開き直してみましょう。

ファイルを開き直すには「:e」を実行します。また「++」に続けて、実行コマンドを付与できます。

# ファイルを開き直す(euc-jpで開き直す場合)
:e ++enc=euc-jp

# あれっ、うまく行かたなかった・・、sjisも試してみる
:e ++enc=sjis

いつくか思いつく文字コードを、えいっえいっと試してみて下さい。だいたいうまくいくと思います。

たぶんうまくいかない・・:Macのexcelの問題
マックからExcelで出力したCSVの判別がいろいろ複雑な事になっているようで、なんだか正しい答えがわかりません。これはVim上で解決できませんでした。

わかっている解決手段は、いったんエクセルからツールバー>インポート>CSVで、文字コードを「Japanese (Mac)」で一旦開けますので、そこからクリップボードを経由して、Google Spreadsheetなどから、再度CSVを吐き出す、などでしょうか・・・。

文字コードを指定して、保存する

さて、上記、SJISでうまくファイルが文字化けせず開けたとします。

Vimでは、ファイルを開いた際に、自動的に「保存時のエンコード設定(fileencoding値)」がその値に登録されます。これは、Vimデフォルトの振る舞いで、ファイルエンコーディングを、不用意に元のファイルの状態から変更しないための仕様だと思います。

でも、今後のことも考えて、uft-8で(かつ、別ファイル名で)保存しておきます。

# 保存エンコーディングを明示的にセット(utf-8で保存する)
:set fenc=utf-8

# ファイルを別名で、保存。そのままそのファイルを編集
:saveas index-utf8.html

# もし、saveasの代わりに:もし上書きしていいなら、そのまま上書き
:w

やった、解決できましたね?

vim設定ファイルに対応を書き込む

さて、上位で行ったことに関して、デフォルトの設定を、~/.vimrcに書いておきます。

上記では言及しなかった「fileencodings」「fileformats」という値は、VIM起動時に、左から順番に試して「成功」と判別されたら、その文字コードで開きます。判別に成功したその時点で、自動的にそのfileencoding, fileformat値が、それぞれ、fileencodingやfileformatに設定され、極力ファイル保存時の状態を変更しないようにはからってくれるのがVIMのデフォルトの振る舞いです。

下記のように、よくある化け種類を左側に書いておくと、もれなく吟味してくれるはずです。

どう設定しておくべき?というのは、自分の方針や、チームの状況によるとおもいますので、必要に応じてカスタマイズして使って下さい。

##################################
# Vim起動時に、判別の優先度を定める設定
##################################

# ファイルを読み込む時の、文字コード自動判別の順番
:set fileencodings=utf-8,cp932,euc-jp,sjis


##################################
# Vim起動時に、強制する設定
##################################

# vimの内部文字コード (これを書くと、上記の優先度設定が無視されます)
:set encoding=utf-8

# ファイルのエンコーディング(改行コードの種類)
:set fileformat=unix

もちろん、vim 起動中も「:set fencs?」で、現在の設定を確認できますからね。

参考リンク

日本語っていろいろ大変ですね。でも、上記を把握しておくと、結構、文字コードが怖くないです。

類似の話題で、改行コードに関してはこっちも参考にどうぞ。

Vimの保存に関して参考リンクです。

さすがにマニュアル詳しいですね、難しいけど。

 

閉じる