我得到了
给定编码中的无效字符。
当试图在包含“0”符号的xml元素中Read()文本时出现异常。
xml元素如下所示:
<COMMENTS>NOTE:
5¢ 50 10,000
25¢ 10 2,000</COMMENTS>我尝试使用.NET的XmlConvert类(它声称修复了这些类型的问题),但它没有检测到“0”符号无效。
public PaytableReaderStrategy(string filepath)
{
if (!File.Exists(filepath))
throw new ApplicationException("Could not read .xml from provided filepath.");
string content = File.ReadAllText(filepath);
if (!IsValidXmlString(content))
File.WriteAllText(filepath, RemoveInvalidXmlChars(content));
Reader = new XmlTextReader(filepath);
}
private static string RemoveInvalidXmlChars(string text)
{
var validXmlChars = text.Where(ch => XmlConvert.IsXmlChar(ch)).ToArray();
return new string(validXmlChars);
}
private static bool IsValidXmlString(string text)
{
try
{
XmlConvert.VerifyXmlChars(text);
return true;
}
catch
{
return false;
}
}这一问题是否有.NET风格的解决方案,不仅处理“美分”符号,而且检测和删除任何冒犯符号?
发布于 2015-08-06 21:28:16
正如注释中提到的那样,问题是默认情况下您的文件将使用Encoding.UTF8解码,但是您的文件不是用UTF8编码的。这意味着正常ASCII集之外的字符将无法正确解码。
您可以通过使用StreamReader并将其传递给XmlReader.Create来指定编码。
var sr = new StreamReader(filepath, Encoding.Default);
Reader = XmlReader.Create(sr);请注意,您应该确保在读取完文件后,Reader和sr都会被释放。
https://stackoverflow.com/questions/31864380
复制相似问题