我正在
在包含'¢'符号的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风格的解决方案,不仅可以处理'¢'符号,还可以检测并删除任何有问题的符号?
答案 0 :(得分:1)
正如评论中所提到的,问题是默认情况下您的文件将使用Encoding.UTF8
进行解码,但您的文件未以UTF8编码。这意味着普通ASCII集之外的字符将无法正确解码。
您可以使用StreamReader
指定编码并将其传递给XmlReader.Create
:
var sr = new StreamReader(filepath, Encoding.Default);
Reader = XmlReader.Create(sr);
请注意,您应该确保在阅读完文件后处理Reader
和sr
。