Мой ответ основан на ответе HelloSam, который содержит всю необходимую информацию.Только я полагаю, что OP запрашивает, как убедиться, что спецификация передается в файл.
Так что вместо передачи false в кодировщик UTF8Encoding вам нужно передать true.
using (var sw = new StreamWriter("text.txt", new UTF8Encoding(true)))
Попробуйте приведенный ниже код, откройте получившиеся файлы в шестнадцатеричном редакторе и посмотрите, какой из них содержит спецификацию, а какой нет.
class Program
{
static void Main(string[] args)
{
const string nobomtxt = "nobom.txt";
File.Delete(nobomtxt);
using (Stream stream = File.OpenWrite(nobomtxt))
using (var writer = new StreamWriter(stream, new UTF8Encoding(false)))
{
writer.WriteLine("HelloПривет");
}
const string bomtxt = "bom.txt";
File.Delete(bomtxt);
using (Stream stream = File.OpenWrite(bomtxt))
using (var writer = new StreamWriter(stream, new UTF8Encoding(true)))
{
writer.WriteLine("HelloПривет");
}
}