XmlTextReader无效的字符异常 - 字符是'¢'符号

时间:2015-08-06 19:38:13

标签: c# xml

我正在

  

给定编码中的字符无效。

在包含'¢'符号的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风格的解决方案,不仅可以处理'¢'符号,还可以检测并删除任何有问题的符号?

1 个答案:

答案 0 :(得分:1)

正如评论中所提到的,问题是默认情况下您的文件将使用Encoding.UTF8进行解码,但您的文件未以UTF8编码。这意味着普通ASCII集之外的字符将无法正确解码。

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

var sr = new StreamReader(filepath, Encoding.Default);
Reader = XmlReader.Create(sr);

请注意,您应该确保在阅读完文件后处理Readersr