XmlTextReader无效字符异常-字符为'¢'的象征
本文关键字:字符 #162 无效 XmlTextReader 异常 | 更新日期: 2023-09-27 18:06:40
我得到
给定编码中的无效字符。
尝试在包含'¢'符号的xml元素中Read()
文本时出现异常。
XML元素看起来像这样:
<COMMENTS>NOTE:
5¢ 50 10,000
25¢ 10 2,000</COMMENTS>
我尝试使用。net的XmlConvert类(它声称修复这些类型的问题),但它没有检测到'¢'符号无效。
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风格的解决方案来处理这个问题,不只是'¢'符号,但检测和删除任何冒犯符号?
正如评论中所暗示的那样,问题是您的文件将默认使用Encoding.UTF8
解码,但您的文件不是用UTF8编码的。这意味着正常ASCII集之外的字符将无法正确解码。
您可以通过使用StreamReader
并将其传递给XmlReader.Create
来指定编码:
var sr = new StreamReader(filepath, Encoding.Default);
Reader = XmlReader.Create(sr);
注意,您应该确保在完成读取文件后,将Reader
和sr
都处理掉。