← Vim研究所

Vimで文字化けしたファイルを別の文字コードで開き直す(:e ++enc=)

2019-11-16 公開 ・ 更新: 2026-08-05

ファイルを開いた瞬間に文字化けした画面が出てくると焦ります。原因の多くは、Vimの自動判定が実際の文字コードと違う候補を選んでしまったことにあります。正しい文字コードを指定して開き直せば、たいていは元通りに読めます。

目次(5項目)
文字コードこれだけ覚える
cp932Windows由来の日本語ファイルでまず試す
euc-jpUnix/Linux系の古い日本語ファイルに多い
iso-2022-jpメールなど「JIS」表記のファイル

指定した文字コードで開き直す

:e ++enc=cp932
:e ++enc=euc-jp
:e ++enc=iso-2022-jp

++enc=のあとに正しい文字コードを指定して:e:edit)を実行すると、今開いているファイルをその文字コードとして読み込み直します。文字化けした画面のまま原因の文字コードを特定するのは難しいですが、日本語のテキストなら候補は数種類に絞られるので、いくつか試せば当たりが見つかることが多くあります。

BEFORE
?????????
:e ++enc=cp932
AFTER
こんにちは

CP932のファイルをEUC-JPと誤認識すると、無効なバイト列としてこのように読めなくなります。++enc=cp932で開き直せば正しく表示されます。

なぜ自動判定を外すのか

Vimはファイルを開くとき、fileencodingsオプションに列挙された文字コードを順番に試し、最初に矛盾なく読み込めたものを採用します。この自動判定は多くの場合うまく機能しますが、Shift-JISとEUC-JPのように判定が紛らわしい組み合わせでは誤判定が起きることがあります。++enc=はこの自動判定を無視して、指定した文字コードで強制的に読み込み直すための指定です。

set fileencodings=iso-2022-jp,ucs-bom,sjis,utf-8,euc-jp,cp932,default,latin1

自動判定でよく誤判定される組み合わせが多い環境では、fileencodingsの候補順を調整しておくと、そもそも++enc=で開き直す頻度自体を減らせます。

保存時の文字コードとは別物

++enc=はあくまで「読み込み時」にどの文字コードとして解釈するかの指定であり、保存時の文字コードには影響しません。開き直したあとに正しく読めているのを確認したら、保存前にfileencodingの値も意図した形式になっているかを確認しておくと安心です。保存時の指定方法は別記事にまとめています。

候補が分からないとき

どの文字コードか見当がつかない場合は、OS側のツールで先に判定してから開き直すという手もあります。Linux/Macならfile -i {ファイル名}でおおよそのエンコーディングを推測できます。Vimの中からでも:r!コマンド:!コマンドを使えば、わざわざ別のターミナルを開かずに確認できます。

要点:文字化けしたら:e ++enc={文字コード}で開き直します。日本語ならcp932euc-jpiso-2022-jpあたりを順に試せば大抵解決します。
使ってみて

古いWindows由来のCSVファイルを開くたびに文字化けしていましたが、原因がCP932だと分かってからは:e ++enc=cp932を反射的に打つようになりました。何度も同じ文字コードで開き直すファイルが多いなら、いっそfileencodingsの候補順を見直したほうが根本的な解決になると気づいたのは、しばらく経ってからでした。

まとめ

文字化けの多くは自動判定の誤りが原因で、:e ++enc=で正しい文字コードを指定すれば開き直せます。同じ文字コードで何度も開き直すなら、fileencodingsの設定自体を見直すのも有効です。

← Vim研究所 トップへ戻る