c# - 将流上的编码更改为 UTF-8 (MemoryMappedViewStream)

标签 c# encoding xmlreader memory-mapped-files

我正在使用下面的代码尽可能快地读取 ~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/

相关文章:

html - 当我可以使用等效代码时,为什么不应该在文件名中使用空格?

python - 如何使用 Python 使用 Unicode 编码查找和替换 *.txt 文件中的字符串?

javascript - react-native-bluetooth-escpos-printer 编码土耳其语字符问题

c# - xml 文档异常中禁止 DTD

android - LibGDX 读取 XML 文件

c# - 我不明白为什么我会收到以下错误

c# - ElasticSearch NEST 术语查询未返回结果

c# - 数据库优先 EF dnx ef dbcontext 脚手架命令失败

php - 如何在 PHP 中使用 XMLReader?

c# - C#中的唯一键值集合