我试图创建一个文本文件使用VB.Net与UTF8编码,没有BOM。任何人都可以帮助我,怎么办?
我可以写文件用UTF8编码,但是,如何从它的字节顺序标记中删除?
编辑1:
我试过这样的代码;
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",utf8) strw2.Write(utf8.GetPreamble()) strw2.WriteLine("hi there") strw2.Close()
1.html用UTF8编码创建,2.html用ANSI编码格式创建。
简化方法 – http://whatilearnttuday.blogspot.com/2011/10/write-text-files-without-byte-order.html
为了省略字节顺序标记(BOM),您的流必须使用
System.Text.Encoding.UTF8
之外的
UTF8Encoding
实例(配置为生成BOM)。有两种简单的方法:
1.显式指定合适的编码:
>为encoderShouldEmitUTF8Identifier参数调用带有False的UTF8Encoding
constructor。
>将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.使用默认编码:
如果你根本不给StreamWriter的构造函数提供一个Encoding,StreamWriter默认情况下会使用一个没有BOM的UTF8编码,所以下面的代码也应该工作:
' VB.NET: Using sink As New StreamWriter("Foobar.txt") sink.WriteLine("...") End Using
// C#: using (var sink = new StreamWriter("Foobar.txt")) { sink.WriteLine("..."); }
最后,请注意,省略BOM仅允许使用UTF-8,而不允许使用UTF-16。