C# XP中的ManagementObjectSearcher结果编码

C# XP中的ManagementObjectSearcher结果编码,c#,xml,C#,Xml,我们有C#代码,它通过ManagementObjectsearcher获得一些系统信息并将其编码到XmlDocument中。它看起来像这样: searcher = new ManagementObjectSearcher(managementScope, new ObjectQuery("SELECT * FROM Win32_ComputerSystem")); foreach (ManagementObject obj in searcher.Get()) {

我们有C#代码,它通过ManagementObjectsearcher获得一些系统信息并将其编码到XmlDocument中。它看起来像这样:

   searcher = new ManagementObjectSearcher(managementScope, new ObjectQuery("SELECT * FROM Win32_ComputerSystem"));
    foreach (ManagementObject obj in searcher.Get())
    {
        if (obj["Manufacturer"] != null)
        {
            temp = obj["Manufacturer"].ToString();
            if (temp.Length > 0)
            {
                node = doc.CreateElement("Manufacturer");
                node.InnerText = Regex.Replace(temp, "[ ]+", " ").Trim();                                
                nodeDesc.AppendChild(node);

                if (obj["Model"] != null)
                {
                    temp = obj["Model"].ToString();
                    if (temp.Length > 0)
                    {
                        node = doc.CreateElement("Model");
                        node.InnerText = Regex.Replace(temp, "[ ]+", " ").Trim(); ;
                        nodeDesc.AppendChild(node);
                    }
                }
在极少数情况下,调用doc.OuterXml时会引发异常:

"The surrogate pair (0xD8AC, 0xE332) is invalid. A high surrogate character (0xD800 - 0xDBFF) must always be paired with a low surrogate characters (0xDC00-0xDFFF)."
我怀疑这种情况发生在编码设置不同的XP机器上,例如中文Windows XP。可能obj[“xxxxx”]返回的字符串是用Big5或GB编码的

  • 是否会出现这种情况以及引发异常的原因
  • 如何确定正确的编码
  • 我如何改变这种编码,使之适合XmlDocument(在调用OuterXml时)

  • 非常感谢你的帮助!这一条尤其让我抓狂,因为我们还没有找到在内部复制它的方法。

    要进行调试,您可以将捕获的所有字符串转储到日志文件(例如UTF8)中,然后让客户将日志传输给您?然后您可以尝试将这些字符串放在XML文档中以复制它。我建议使用UTF-16,因为这是内部的.NET字符串表示。。。