我正在使用下面的代码尽可能快地读取 ~2.5Gb Xml 文件(感谢 MemoryMappedFile)。但是,我收到以下异常:“'.',十六进制值 0x00,是无效字符。第 9778 行,位置 73249406.”。我相信这是由于一些编码问题。如何确保 MemoryMappedViewStream 使用 UTF-8 读取文件?
static void Main(string[] args)
{
using (var file = MemoryMappedFile.CreateFromFile(@"d:\temp\temp.xml", FileMode.Open, "MyMemMapFile"))
{
using (MemoryMappedViewStream stream = file.CreateViewStream())
{
Read(stream);
}
}
}
static void Read(Stream stream)
{
using (XmlReader reader = XmlReader.Create(stream))
{
reader.MoveToContent();
while (reader.Read())
{
}
}
}
最佳答案
您可以使用 StreamReader
类来设置编码:
static void Main(string[] args)
{
using (var file = MemoryMappedFile.CreateFromFile(@"d:\temp\temp.xml", FileMode.Open, "MyMemMapFile"))
{
using (MemoryMappedViewStream stream = file.CreateViewStream())
{
Read(stream);
}
}
}
static void Read(Stream stream)
{
using (XmlReader reader = XmlReader.Create(new StreamReader(stream, Encoding.UTF8)))
{
reader.MoveToContent();
while (reader.Read())
{
}
}
}
希望这对您有所帮助。
关于c# - 将流上的编码更改为 UTF-8 (MemoryMappedViewStream),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7125050/