Mat*_*ero 3 .net c# encoding byte-order-mark utf-8
我们知道类的构造函数UTF8Encoding可以接收一个可选参数:一个bool指定编码器是否应该提供字节顺序标记(BOM)的参数。
但是,当使用这两种方法编码相同的文本时,输出是相同的:
string text = "Hello, world!";
byte[] withBom= new UTF8Encoding(true).GetBytes(text);
byte[] withoutBom = new UTF8Encoding(false).GetBytes(text);
Run Code Online (Sandbox Code Playgroud)
双方withBom并withoutBom具有相同的内容,一个甚至没有一个字节超过了其他一个。
为什么会发生这种情况?为什么没有添加字节顺序标记withBom?
构造函数中的 BOM 参数不影响 的结果GetBytes,它影响 的结果GetPreamble。用户应该手动附加它。
byte[] bom = new UTF8Encoding(true).GetPreamble(); // 3 bytes
byte[] noBom = new UTF8Encoding(false).GetPreamble(); // 0 bytes
Run Code Online (Sandbox Code Playgroud)