Чтобы опустить метку порядка байтов (BOM), ваш поток должен использовать экземпляр UTF8Encoding
, отличный от System.Text.Encoding.UTF8
(который настроен для создания спецификации). ). Есть два простых способа сделать это:
1. Явно указав подходящую кодировку:
Вызовите конструктор UTF8Encoding
с False
для параметра encoderShouldEmitUTF8Identifier
.
Передать экземпляр UTF8Encoding
в конструктор потока.
' VB.NET:
Dim utf8WithoutBom As New System.Text.UTF8Encoding(False)
Using sink As New StreamWriter("Foobar.txt", False, utf8WithoutBom)
sink.WriteLine("...")
End Using
// C#:
var utf8WithoutBom = new System.Text.UTF8Encoding(false);
using (var sink = new StreamWriter("Foobar.txt", false, utf8WithoutBom))
{
sink.WriteLine("...");
}
2. Использование кодировки по умолчанию:
Если вы вообще не предоставляете конструктор Encoding
для StreamWriter
, StreamWriter
по умолчанию будет использовать кодировку UTF8 без спецификации, поэтому следующее также должно работать:
' VB.NET:
Using sink As New StreamWriter("Foobar.txt")
sink.WriteLine("...")
End Using
// C#:
using (var sink = new StreamWriter("Foobar.txt"))
{
sink.WriteLine("...");
}
Наконец, обратите внимание, что исключение спецификации допустимо только для UTF-8, но не для UTF-16.