C#StreamWriter将多余的字节写入流中

问题描述 投票:1回答:2
var memStream = new MemoryStream();
using (var sw = new StreamWriter(memStream, Encoding.UTF8, 4194304 /* 4 MiB */, leaveOpen: true))
{
     var str = new string(Enumerable.Repeat(' ', 10240 /* 10 * KiB */).ToArray());
     Console.WriteLine(str.Length);
     Console.WriteLine(Encoding.UTF8.GetBytes(str).Length);
     sw.Write(str);
     sw.Flush();
     Console.WriteLine(memStream.Length);
}
// Output
// ---------
// 10240
// 10240
// 10243

// Output which I was expecting
// ---------
// 10240
// 10240
// 10240

我检查了MSDN上的StreamWriter.Write(String)文档,但没有发现任何提及此API可以向流中写入额外字节的信息。(MSDN Doc StreamWriter.Write)。我正在使用.NET Core 3.1,但我猜想这种行为在Core 2.0和Framework中也适用,尽管我没有明确检验它们的假设。我已经仔细阅读了StreamWriter文档,但没有发现这种行为。这是错误还是预期的行为,或者我缺少什么?

c# .net .net-core
2个回答
3
投票

您可以通过使用UTF8Encoding创建不应发出UTF8标识符的new UTF8Encoding(false)来防止BOM表的输出:


0
投票

当我在LINQPad 6中运行时,我得到了

© www.soinside.com 2019 - 2024. All rights reserved.