C#StreamReader检测与维护#x2;XML文件的编码
在我的xml文件中,我有如下数据:C#StreamReader检测与维护#x2;XML文件的编码,c#,.net,xml,C#,.net,Xml,在我的xml文件中,我有如下数据: <Data> <Field> <Name>BarcodeCapture_0</Name> <Type>SimpleIndex</Type> <DataType>DataMatrix</DataType> <Value>DEA"¡CV°)Ñ
<Data>
<Field>
<Name>BarcodeCapture_0</Name>
<Type>SimpleIndex</Type>
<DataType>DataMatrix</DataType>
<Value>DEA"¡CV°)Ñ võ Fƒ´ 20100410050</Value>
</Field>
</Data>
问题是StreamReader无法检测到;编码,因此无法删除此字符,Xml反序列化失败。尝试:
using (var sr = new StreamReader("XMLFile1.xml", Encoding.UTF8))
using (var xtr = new XmlTextReader(sr))
{
XmlSerializer s = new XmlSerializer(typeof(ScanTransaction));
ScanTransaction result = (ScanTransaction)s.Deserialize(xtr);
}
您甚至不需要“特殊的”StreamReader
。XmlTextReader
不检查非法字符(您可以使用Normalize
布尔属性控制,但默认情况下它是false
,因此不检查非法字符)尝试:
using (var sr = new StreamReader("XMLFile1.xml", Encoding.UTF8))
using (var xtr = new XmlTextReader(sr))
{
XmlSerializer s = new XmlSerializer(typeof(ScanTransaction));
ScanTransaction result = (ScanTransaction)s.Deserialize(xtr);
}
您甚至不需要“特殊的”
StreamReader
。XmlTextReader
不检查非法字符(您可以使用Normalize
布尔属性控制它,但默认情况下它是false
,因此不检查非法字符)只是建议:将任何编码的字符串转换为字节数组,然后转换为base64字符串,xml只存储base64字符串和编码类型。转换回来是安全的。反序列化不同于原始数据的数据真的是个好主意吗?您正在删除“非法”xml字符。。。但它们存在于原始数据中…@xanatos是的,因为原始数据在反序列化后被清除,我将数据发送到服务器。如果不这样做,问题是整个过程都被阻塞了。建议:将任何编码的字符串转换为字节数组,然后转换为base64字符串,xml只存储base64字符串和编码类型。转换回来是安全的。反序列化不同于原始数据的数据真的是个好主意吗?您正在删除“非法”xml字符。。。但它们存在于原始数据中…@xanatos是的,因为原始数据在反序列化后被清除,我将数据发送到服务器。问题是如果你不这样做,整个过程都会被阻塞
using (var sr = new StreamReader("XMLFile1.xml", Encoding.UTF8))
using (var xtr = new XmlTextReader(sr))
{
XmlSerializer s = new XmlSerializer(typeof(ScanTransaction));
ScanTransaction result = (ScanTransaction)s.Deserialize(xtr);
}