🙆

VS Codeで開いたファイルの文字化けを解消する

2022/12/18に公開

今ではutf-8使っていれば大抵問題ないのですが、
古いソースをメンテする場合、標準の文字コードと異なる場合があり、
そうするとファイルを開いた際に日本語が文字化けして表示されてしまいます。

文字化けを何とかしたい、日本語で検索してもファイルが見つからない場合に、下記の設定で解決できるかもしれません。

ファイルを開く際にVS Code側で自動で判別する方法

設定のAuto Guess Encodingにチェックを入れるだけでOKです。

ファイルを開く際の文字化けを回避するならこれだけで良いのですが、
説明にもあるようにテキスト検索には考慮されないため、
ソース内の日本語をキーワードに対象ファイルを抽出したい場合に全然引っかかってくれません。
これを解決するのが以下

ファイルのエンコードを指定

Encodingで開きたい文字コードを指定すればOKです。

これでテキスト検索にも引っかかるようになります。
ファイルのエンコードが統一されていればここの設定だけで十分機能します。
しかし、プログラムによって文字コードが異なる場合、片方に合わせるともう一方が文字化けして問題
htmlファイルはUTF-8、javaファイルはEUC-JPなんて場合です。

プログラム言語単位でファイルの文字コードを指定

これは設定から項目指定することが出来ません。
settings.jsonという設定用のファイルを編集することになります。

settings.jsonを編集するには、
設定を開いた状態で右上のアイコンをクリックすると編集することが出来ます。

settings.jsonに下記のように記述します。

{
    "files.encoding": "utf8",
    "files.autoGuessEncoding": true,
    "[java]": {
        "files.encoding": "eucjp"
    }
}

1つずつ見ていくと、

"files.autoGuessEncoding": true 

1つ目に紹介した設定と同じ意味です。

"files.encoding": "utf8"

2つ目に紹介した設定と同じ意味です。

"[java]": {
   "files.encoding": "eucjp"
}

この部分がプログラム言語ごとにエンコードを指定する部分の記述です。
キーに"[プログラム言語]"を指定し、その中に設定したい設定を記述することで、
その言語のファイルを開いた場合にのみ設定が有効になります。
上記の場合、javaのファイルを開いた場合にEUC-JPでファイルを開いてくれます。
他のファイルを開いた場合は"files.autoGuessEncoding"に従って自動的に判断して開きます。
テキスト検索の場合はjavaファイルはEUC-JP、それ以外はutf-8の文字コードで検索してくれます。

それでもできない

上記でもjavaのpropertiesファイルは特殊なエンコードがされているため、対応されていませんでした。
当時もnative2asciiというツールを使って変換していたのを思い出しました。

native2asciiについては、下記のプラグインを導入することで対応することでひとまず解決。
https://github.com/cwan/native-ascii-converter

蛇足

便宜上プログラム言語ごとに、という表現を用いていましたが、
正確にはVS Codeが持つ言語モードという単位での指定となります。
どの言語モードで開いているかはエディタの下部に表示されています。

.javaファイルを開くと言語モードはjavaということになります。
.java.bkのようなバックアップしたファイルは拡張子的には.bkなのでjavaファイルではないのですが、これも言語モードjavaとして扱ってくれて、検索にも引っかかります。

Discussion