はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【C#】BOM無しのUTF-8でファイルに書き込む方法

はじめに

今回はBOM無しのUTF-8でファイルに書き込む方法について紹介したいと思います。

やり方

encoderShouldEmitUTF8Identifierfalseに指定したUTF8Encodingを利用します。
learn.microsoft.com

// BOM付きUTF-8で書き出す
File.WriteAllText(path, "Hello, World", Encoding.UTF8);

// ef, bb, bf がUTF-8のBOM
// ef, bb, bf, 48, 65, 6c, 6c, 6f, 2c, 20, 57, 6f, 72, 6c, 64
Console.WriteLine(string.Join(", ", File.ReadAllBytes(path).Select(x => x.ToString("x"))));

// BOM無しUTF-8でテキストを書き出す
File.WriteAllText(path, "Hello, World", new UTF8Encoding(false));

// 48, 65, 6c, 6c, 6f, 2c, 20, 57, 6f, 72, 6c, 64
Console.WriteLine(string.Join(", ", File.ReadAllBytes(path).Select(x => x.ToString("x"))));

// UTF8EncodingのデフォルトはBOM無し
File.WriteAllText(path, "Hello, World", new UTF8Encoding());

// 48, 65, 6c, 6c, 6f, 2c, 20, 57, 6f, 72, 6c, 64
Console.WriteLine(string.Join(", ", File.ReadAllBytes(path).Select(x => x.ToString("x"))));

補足としてですが、Encoding.UTF8を利用した場合はBOM付きになってます。