Sahara's WebLog

日記のような、備忘録のような、うらみつらみのような、自慢のような…。

BATファイルの文字のエンコードはShift-JISかUTF-8(BOM無し)

とあるフリーソフトが吐く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無し)」と変更した。

Posted under: C#


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Time limit is exhausted. Please reload CAPTCHA.