I am trying to create a text file using VB.Net with UTF8 encoding, without BOM. Can anybody help me, how to do this?
I can write file with UTF8 encoding but, how to remove Byte Order Mark from it?
edit1:
I have tried code like this;
Dim utf8 As New UTF8Encoding()
Dim utf8EmitBOM As New UTF8Encoding(True)
Dim strW As New StreamWriter("c:\temp\bom\1.html", True, utf8EmitBOM)
strW.Write(utf8EmitBOM.GetPreamble())
strW.WriteLine("hi there")
strW.Close()
Dim strw2 As New StreamWriter("c:\temp\bom\2.html", True, utf8)
strw2.Write(utf8.GetPreamble())
strw2.WriteLine("hi there")
strw2.Close()
1.html get created with UTF8 encoding only and 2.html get created with ANSI encoding format.
Simplified approach – http://whatilearnttuday.blogspot.com/2011/10/write-text-files-without-byte-order.html
Best Answer
In order to omit the byte order mark (BOM), your stream must use an instance of
UTF8Encoding
other thanSystem.Text.Encoding.UTF8
(which is configured to generate a BOM). There are two easy ways to do this:1. Explicitly specifying a suitable encoding:
Call the
UTF8Encoding
constructor withFalse
for theencoderShouldEmitUTF8Identifier
parameter.Pass the
UTF8Encoding
instance to the stream constructor.2. Using the default encoding:
If you do not supply an
Encoding
toStreamWriter
's constructor at all,StreamWriter
will by default use an UTF8 encoding without BOM, so the following should work just as well:Finally, note that omitting the BOM is only permissible for UTF-8, not for UTF-16.