sh1’s diary

プログラミング、読んだ本、資格試験、ゲームとか私を記録するところ

VisualStudio デフォルトエンコーディングの指定

VisualStudio のデフォルトエンコーディングは、隙あらば shift-jis が使われました。これまでは。

これとにかく気持ち悪くて、shift-jis と UTF8 が混在するのは VisualStudio のコーディングする上で気づいたらそうなってしまうもので、vscode と違ってパッと見てエンコーディングもわからないので、不満でした。

日本語が混在すると勝手に切り替わる仕様があった?(参考より)

設定変更

  • ツール>オプション>環境>ドキュメント

設定前:

設定後:

特定のエンコーディングでファイルを保存を変更しましょう。

おまけ

日本語の windows 環境では shift-jis が今でもよく使われるので UTF-8 と shift-jis を区分するために BOM が有効だ、という指摘があります。shift-jis 駆逐したい私は賛成派。

BOM は EF BB BF というバイト列をファイルの頭に付与する仕組みです。ちなみに、Unicode 標準では、UTF-8エンコードされたストリームに BOM を使用は推奨されていないみたいです。Visual Studio の日本語の都合です。(補足すると UTF-16/32 のために示すものだから)

var fs = new FileStream("bom.txt", FileMode.Open);
var bits = new byte[3];

fs.Read(bits, 0, 3);

// BOM の判定例
if (bits[0] == 0xEF && bits[1] == 0xBB && bits[2] == 0xBF)
{
    ...
}

簡単な仕様ですが BOM はデメリットもあって、プログラムが間違って BOM なし UTF8 のファイルだと解釈すると BOM の部分がテキスト中に含まれることで、誤動作に繋がる恐れがあります。見えない文字なので、文字化けよりも気づきづらい恐れもある点は留意してよいと思います。

Visual Studio は公式に BOM を期待する設定になっているので使うことになりますが、Linux や Web 系では一般的に使うべきではないと思います。(使われてもいない)UTF8 with BOM は、ここも日本語の Windows 環境の独自性からメリットが発生している都合の認識です。

テキストエディタによっては、BOM をつけるかつけないかを指定できることもあるので、用途を知っておくと GOOD ではないかと。

参考