将流上的编码更改为 UTF-8 (MemoryMappedViewStream)
我正在使用下面的代码尽可能快地读取 ~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())
{
}
}
}
I am using the code below to read a ~2.5Gb Xml file as fast as I can (thanks to MemoryMappedFile). However, I am getting the following exception: "'.', hexadecimal value 0x00, is an invalid character. Line 9778, position 73249406.". I beleive it is due to some encoding problem. How do I make sure that the MemoryMappedViewStream reads the file using 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())
{
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以使用 StreamReader 类来设置编码:
希望,这会有所帮助。
You could use the
StreamReader
class to set the encoding:Hope, this helps.
在 MSDN 上,您会得到以下内容。
“XmlReader 扫描流的第一个字节,查找字节顺序标记或其他编码标志”
您的 xml 文件是否指定了编码?
On MSDN you get the following.
"The XmlReader scans the first bytes of the stream looking for a byte order mark or other sign of encoding"
Does your xml file specify an encoding?