首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XmlTextReader无效字符异常-字符为“3”符号

XmlTextReader无效字符异常-字符为“3”符号
EN

Stack Overflow用户
提问于 2015-08-06 19:38:13
回答 1查看 1.3K关注 0票数 0

我得到了

给定编码中的无效字符。

当试图在包含“0”符号的xml元素中Read()文本时出现异常。

xml元素如下所示:

代码语言:javascript
复制
<COMMENTS>NOTE:
         5¢                                   50                                          10,000
        25¢                                  10                                             2,000</COMMENTS>

我尝试使用.NET的XmlConvert类(它声称修复了这些类型的问题),但它没有检测到“0”符号无效。

代码语言:javascript
复制
  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风格的解决方案,不仅处理“美分”符号,而且检测和删除任何冒犯符号?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-06 21:28:16

正如注释中提到的那样,问题是默认情况下您的文件将使用Encoding.UTF8解码,但是您的文件不是用UTF8编码的。这意味着正常ASCII集之外的字符将无法正确解码。

您可以通过使用StreamReader并将其传递给XmlReader.Create来指定编码。

代码语言:javascript
复制
var sr = new StreamReader(filepath, Encoding.Default);
Reader = XmlReader.Create(sr);

请注意,您应该确保在读取完文件后,Readersr都会被释放。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31864380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档