TFS+Visual Studioで勝手に文字コードが変換される問題

BOM無しのUTF-8で書かれた複数のソースファイルをVisual StudioからTFSにチェックインしていたが、これをエディタで開いたり別ブランチへマージしたりすると、一部のファイルだけなぜか勝手にShift_JISに変換されてしまい、UTF-8のつもりで扱うと文字化けしてしまうという問題が起きて調査した。

このことから、TFS上でShift_JISと誤認識された状態のファイルにUTF-8の2バイト文字を追加しても、TFS上のエンコードは更新されないということが分かり、そのファイルをVisual Studioのエディタで開いたりマージしたりすると自動的にShift_JISに変換されると思われた。TFSからファイルを取得しただけなら変換かからないし、変換されても文字の見た目は変化しないし警告の類も出ないのでとても気が付きにくい。

動作上の問題の他にも、ブラウザからTFS上のソースコード・変更セットを見た時もこのTFS上のエンコードが効くので、実際のエンコードとずれていると日本語コメントとかが文字化けしてしまう。

良い手が見つからなかったので、自動テストでTFSのコマンドを叩いて、指定ディレクトリ以下のソースコードについて、エンコードをチェックするようにして、チェックイン後にもしShift_JISが含まれていたら検出できるようにした。

他には、例えば常に初回のチェックイン時から日本語やおまじないコメントを入れておくような対策を取るか

UTF-8 の文字化け対策! 「美乳」ではなく「†(ダガー)」を使う | 亜細亜ノ蛾

そもそもこのファイルはVisual Studio Code書いたものだったので、そっちから直接チェックインすれば、Visual Studio Code自身は.editorconfigでBOM無しUTF-8だと分かっているのでうまくいくのかもしれない。未確認。