(新的Utf8Encoding())的序言是空的.GetPreamble() - 很奇怪

Chr*_*ard 1 .net c# encoding utf-8

任何人都可以解释在新实例化的utf8编码上调用GetPreamble()与在Encoding类中提供的公共编码之间的区别吗?

byte[] p1 = Encoding.UTF8.GetPreamble();
byte[] p2 = new UTF8Encoding().GetPreamble();
Run Code Online (Sandbox Code Playgroud)

p1是正常的3字节utf-8前导码,但p2最终为空,这似乎非常错误.

Mar*_*eli 8

区别在于Enconding的UTF8属性是以这种方式创建的

new UTF8Encoding(true)
Run Code Online (Sandbox Code Playgroud)

这表明encoderShouldEmitUTF8Identifier = true所以3字节前导码就在那里

并调用默认构造函数

new UTF8Encoding() 
Run Code Online (Sandbox Code Playgroud)

这相当于

new UTF8Encoding(false)
Run Code Online (Sandbox Code Playgroud)

为了得到相同的结果:

byte[] p1 = Encoding.UTF8.GetPreamble();
byte[] p2 = new UTF8Encoding(true).GetPreamble();
Run Code Online (Sandbox Code Playgroud)