C#UTF-8-bom转为UTF-8
系统功能是生成个utf-8的xml文件下载到本机,但是用户的系统是Linux,我们的web系统部署到IIS上,生成的XML文件被windows给搞成了utf-8bom,linux又识别不了这种bom.
解决:
XmlDocument xmlDoc = new XmlDocument();
//创建类型声明节点
XmlNode firstNode = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "");
xmlDoc.AppendChild(firstNode);
//创建根节点
XmlElement root = xmlDoc.CreateElement("unitData");
//xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
//xsi:noNamespaceSchemaLocation="unitData-1.0.xsd"
root.SetAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
//root.SetAttribute("noNamespaceSchemaLocation", "xsi", "unitData-1.0.xsd");
var attr = xmlDoc.CreateAttribute("xsi:noNamespaceSchemaLocation", "http://www.w3.org/2001/XMLSchema-instance");
attr.Value = "unitData-1.0.xsd";
root.Attributes.Append(attr);
root.SetAttribute("unit", item.unit);
root.SetAttribute("equipment", workstationName);
root.SetAttribute("starttime", item.starttime);
root.SetAttribute("endtime", item.endtime);
root.SetAttribute("state", item.state);
XmlElement node = xmlDoc.CreateElement("test");
node.SetAttribute("name", "FAT");
node.SetAttribute("testResultCode", item.state.ToLower() == "ok" ? "passed" : "failed");
node.InnerText = string.Empty;
root.AppendChild(node);
xmlDoc.AppendChild(root);
string savePath = subpath + "\\" + item.Model + "_" + item.Serialnumber + "_" + DateTime.Now.ToString("yyyyMMdd") + "_" + DateTime.Now.ToString("HHmmss") + ".xml";
//UTF8Encoding(false)表示不要bom
StreamWriter sw = new StreamWriter(savePath, false, new UTF8Encoding(false));
xmlDoc.Save(sw);
sw.WriteLine();
sw.Close();