.NETでストリームを扱う時に、BOMの扱いについて困りましたが、何とか解決。
stream.ToArray()を使う方法があるのですが、
この方法でBOMありのストリームを読みこんだ場合、
BOMも文字列に含まれてしまい、ストリームに書き込んだ文字列と異なってしまいます。
.NETは普通に書き込むとBOMありになるため、
これは困ります。
StreamReaderなどを使いましょう。
var input = "test";
var stream = new MemoryStream();
var writer = new StreamWriter(stream, Encoding.UTF8);
await writer.WriteAsync(input);
await writer.FlushAsync();
stream.Position = 0;
var reader = new StreamReader(stream, Encoding.UTF8);
var output1 = await reader.ReadToEndAsync();
stream.Close();
var output2 = Encoding.UTF8.GetString(stream.ToArray());
var b1 = input == output1; // => true
var b2 = input == output2; // => false