Visual StudioでC#コード中に日本語入れるとshift-jisになることは何度か触れてきました。.editorconfigを使ったchartsetを制御する記事も書いたのですが、2025/Feb/13に降ってきたVisual Studio 2022 17.13.0でデフォルトエンコーディングを設定できるようになったのでメモします。
環境
事前にインストール・アップグレードしておきましょう。このバージョンからデフォルトエンコーディングを設定できるようになりました。
- Visual Studio 2022 17.13.0以上
従来の動作
17.13未満のVisual Studioにおいて、デフォルトエンコーディングはユーザーが指定できませんでした。
これまでの動作は、日本語を使うとShift-JIS (Code page 932)
がデフォルトで使われ、それ以外の場合はUTF-8 without signature - Code page 65001
が使われていました。このため同じプロジェクトでも複数のcharsetがいつのまにか混在していることがありました。
例えば新規ConsoleAppプロジェクトを作成してProgram.csファイルを開き日本語を埋めます。ファイルをVS Codeでファイルを開くとShift-JIS
でエンコードされています。
コマンドでエンコードをサクッと見るためgit bash
のfile
コマンドでエンコードを確認するとunknown-8bit
と表示されます。
$ file -i Program.cs Program.cs: text/plain; charset=unknown-8bit
TIPS: VSの名前を付けて保存でもエンコードは見れるが現在のエンコードと一致しない可能性がある
Visual Studioでも対象ファイルを開いて > File > Save As... でファイルの保存ダイアログ > Save横の▽ > Save with Encoding...
でファイルのエンコードを選択できます。ダイアログが開いたときの現在のエンコードは、UTF-8 (BOMあり)でもShift-JISと判定されるようなので注意です。
デフォルトエンコーディングを設定する
Visual Studio 2022 v17.13のリリースブログを読むと気になる記述があります。
Customize file encoding: Specify the default encoding for saving files in Visual Studio.
Visual Studioを早速17.3.0にアップデートしてみると、リリース機能一覧に設定方法が載っています。
早速、Tools > Options > Environment > Documents > Save files with the following encoding
を見てみましょう。デフォルトはJapanese (Shift-JIS) - Code page 932
になっています。
これを、Unicode (UTF-8 without signature) - Code page 65001
に変更してOKを押すと、デフォルトエンコーディングが変更されます。
動作確認
新規ConsoleAppプロジェクトを作って、Program.csのエンコーディングをVS Codeで確認してみましょう。無事に初期状態でUTF-8 with BOM
になっています。
git bash
のfile
コマンドでエンコードを確認するとutf-8
と表示されます。ばっちりですね。
$ file -i Program.cs Program.cs: text/plain; charset=utf-8
まとめ
Visual Studioのデフォルトエンコーディングが指定できるようになったことは地味ですが本当にうれしいです。.editorconfigでチームとしてのcharset指定は引き続き重要ですが、.editorconfigに頼らずVS単独で指定できないのはIDEとしてなんでという気持ちがありました。これで、.editorconfigの設定が遅れても割と安心できそうです。