【发布时间】:2011-11-08 16:37:49
【问题描述】:
这是我写入文件的测试:
[Test]
public void CanWriteManifestToFile()
{
byte[] data = new byte[] { 0x00, 0x01, 0x80, 0x1f };
MemoryStream ms = new MemoryStream(data);
var mg = new ManifestGeneratorV1();
mg.WriteManifestFile(ms, "TestManifest.mnf");
Assert.IsTrue(File.Exists("TestManifest.mnf"));
Assert.AreEqual(data, GetDataFromFile("TestManifest.mnf"));
}
这里是实际进行写入的 WriteManifestFile 方法:
public void WriteManifestFile(MemoryStream ms, string filePath)
{
using (StreamWriter sw = new StreamWriter(filePath, false))
{
ms.Seek(0, 0);
using (StreamReader sr = new StreamReader(ms))
{
sw.Write(sr.ReadToEnd());
}
}
}
我的测试失败了。结果是以下字节数组{00,01,ef,bf,bd,1f}。现在,如果我将 80 更改为不以 f 或 8 开头的东西,一切正常。什么可能导致 80 更改为 efbfbd?
【问题讨论】:
-
你忘了说你正在改变什么使它正常工作。
-
这些字节是 utf8 BOM。如果您真的想用 BOM 编写 utf8(有问题),请使用 new UTF8Encoding(false)。
标签: c# streamwriter