As someone pointed that out already, calling without the encoding argument does the trick.
However, if you want to be explicit, try this:
using (var sw = new StreamWriter(this.Stream, new UTF8Encoding(false)))
To disable BOM, the key is to construct with a new UTF8Encoding(false)
, instead of just Encoding.UTF8Encoding. This is the same as calling StreamWriter without the encoding argument, internally it’s just doing the same thing.
To enable BOM, use new UTF8Encoding(true)
instead.
Update: Since Windows 10 v1903, when saving as UTF-8 in notepad.exe, BOM byte is now an opt-in feature instead.