如何读取二进制数据;(&;#x2;)在xml中使用windows生成的c

本文关键字:windows xml amp 读取 何读取 二进制 数据 #x2 | 更新日期: 2023-09-27 18:27:11

如何使用windows生成的c#读取xml中的二进制数据(;)。我正在尝试访问windows注册表项中的列表。字符串值中弹出二进制数据。我可以使用xml序列化将其序列化为(&;#x2),但我不能将其反序列化?有人能解释一下出了什么问题,为什么?帮我修一下这个。非常感谢:))读取时的错误为:

System.InvalidOperationException未得到处理
消息="XML文档(235,28)中存在错误。"读取自文件:

public diagnostics readregkey(diagnostics diagnostics, string filename)
{
    diagnostics dia = null;
    using (System.IO.StreamReader sr = 
        new System.IO.StreamReader(filename, Encoding.Unicode))
    {
        System.Xml.Serialization.XmlSerializer x = 
            new System.Xml.Serialization.XmlSerializer(typeof(diagnostics));
        dia = x.Deserialize(sr) as diagnostics;
    }
    return dia;
}

写入文件:

public static void  WriteRegKey(diagnostics diagnostics, string filename)
{
    diagnostic.regKeys.Add(key(Registry.LocalMachine, sKeyGravitas));
    diagnostic.regKeys.Add(key(Registry.CurrentUser, sKeyGravitas));
    using (System.IO.StreamWriter sw = 
        new System.IO.StreamWriter(filename,false, Encoding.Unicode))
    {
        System.Xml.Serialization.XmlSerializer x = 
            new System.Xml.Serialization.XmlSerializer(typeof(diagnostics));
        x.Serialize(sw, diagnostics);
    }
}

如何读取二进制数据;(&;#x2;)在xml中使用windows生成的c

XML文件不能表示每个字符,即使使用&#x;表示法也是如此。

请参阅http://www.w3.org/TR/REC-xml/#charsets

XML 1.1并没有被广泛使用,它可以支持除NUL之外的所有字符。

但对于0x0002,用XML将其表示为根本不是正确的格式。

处理嵌入式二进制数据的常用方法是将其转换为base-64。

我也遇到了这个问题,为了帮助下一个问题,我把以前解决它的方法留在这里。

正如拉维尼奥所说,XML不能代表每一个字符。因此,我用他提供的表格写了一个方法,与另一个问题中的另一个答案非常相似:https://stackoverflow.com/a/641632/2315604,在序列化之前调用。

private string XmlCharWhiteList(string p)
{
        StringBuilder stringBuilder = new StringBuilder();
        foreach(char c in p)
        {
            if (c == 0x0009 || c == 0x000A || c == 0x000D ||
                (c >= 0x0020 && c <= 0xD7FF) ||
                (c >= 0xE000 && c <= 0xFFFD))
                stringBuilder.Append(c);
            else
                stringBuilder.Append(' ');
        }
        return stringBuilder.ToString();
}

而且,由于.NET 4.0,您可以使用XmlConvert.IsXmlCharhttps://msdn.microsoft.com/en-us/library/system.xml.xmlconvert.isxmlchar%28v=vs.110%29.aspx