Ну, это записывает спецификацию, потому что вы указываете это в строке
Encoding utf8WithoutBom = new UTF8Encoding(true);
true
означает, что спецификация должна быть выдана, используя
Encoding utf8WithoutBom = new UTF8Encoding(false);
пишет нет спецификации.
Моя цель - создать файл с использованием UTF-8 в качестве кодировки и 8859-1 в качестве CharSet
К сожалению, это невозможно, вы пишете UTF-8 или нет. То есть Пока символы, которые вы пишете, присутствуют в ISO Latin-1, они будут выглядеть как файл ISO 8859-1, однако, как только вы выведете символ, который не покрывается ISO 8859-1 (например, ä, ö, ü ) эти символы будут записаны как многобайтовые символы.
Для написания настоящего ISO-8859-1 используйте:
Encoding isoLatin1Encoding = Encoding.GetEncoding("ISO-8859-1");
Редактировать: После комментария Балександра
Я использовал следующий код для тестирования ...
var filePath = @"c:\temp\test.txt";
var sb = new StringBuilder();
sb.Append("dsfaskd jlsadfj laskjdflasjdf asdkfjalksjdf lkjdsfljas dddd jflasjdflkjasdlfkjasldfl asääääjdflkaslj d f");
Encoding isoLatin1Encoding = Encoding.GetEncoding("ISO-8859-1");
TextWriter tw = new StreamWriter(filePath, false, isoLatin1Encoding);
tw.WriteLine(sb.ToString());
tw.Close();
И файл выглядит отлично. Очевидно, вы должны использовать ту же кодировку при чтении файла .