C# XP中的ManagementObjectSearcher结果编码
我们有C#代码,它通过ManagementObjectsearcher获得一些系统信息并将其编码到XmlDocument中。它看起来像这样: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()) {
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编码的
非常感谢你的帮助!这一条尤其让我抓狂,因为我们还没有找到在内部复制它的方法。要进行调试,您可以将捕获的所有字符串转储到日志文件(例如UTF8)中,然后让客户将日志传输给您?然后您可以尝试将这些字符串放在XML文档中以复制它。我建议使用UTF-16,因为这是内部的.NET字符串表示。。。