とあるフリーソフトが吐くCSVファイルのデータをもとにBATファイルを作るコンソールアプリケーションをVisual Studio C#で作っている。
「CSVファイルの余分な改行の除去」
CSVのエンコードがUTF-16なのでそのままUTF-16に統一してBATファイルも同じUTF-16で出力した。
BATファイルがエラーで実行できなかった。
秀丸でBATファイルを開いていくら眺めてもおかしな点はなかった。

なぜかというと秀丸が自動的にエンコード方式を考慮して問題なく表示してくれるからだ。
見た目では違いが判らないので気づくまでに結構な時間がかかった。
そもそもBATファイルの文字のエンコードはShift-JISかUTF-8(BOM無し)でなければいけないなんて今まで気にしたこともなかった。
最終的にBATファイルを出力するときにShift-JISにしたら問題なく実行できるようになった。
追記(2025/09/03 10:27)
上の話は.NET Frameworkmの環境での話。
.NET 8.0 の環境にしたらShift-JISが使えなくなった。
utf-8にしたらBATファイルが文字化けした。
検索の結果、以下を宣言すればShift-JISが使えるようになった。
System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
utf-8でなぜ文字化けするのか、その回避方法も不明だ。
追記(2025/09/03 11:12)
utf-8ではBOM無しにしないとBATファイルが文字化けするようだ。
BOM無しにする方法も見つかったがShift-JISで使えるようになったのでそのままにする。
追記(2025/09/04 9:28)
タイトルと本文中の「UTF-8」と書いていた所を「UTF-8(BOM無し)」と変更した。