【问题标题】:{"'\u0004', hexadecimal value 0x04, is an invalid character{"'\u0004',十六进制值0x04,是无效字符
【发布时间】:2018-09-01 06:17:06
【问题描述】:

我正在尝试将文件转换为包含一些特殊字符的 XML 格式,但由于数据中的特殊字符,它没有被转换。 我已经有了这个正则表达式代码,但它对我不起作用,请帮忙。

我尝试过的代码:

string filedata = @"D:\readwrite\test11.txt";
string input = ReadForFile(filedata);
string re1 = @"[^\u0000-\u007F]+";
string re5 = @"\p{Cs}";
data = Regex.Replace(input, re1, "");   
data = Regex.Replace(input, re5, "");

XmlDocument xmlDocument = new XmlDocument();
try
{
   xmlDocument = (XmlDocument)JsonConvert.DeserializeXmlNode(data);
   var Xdoc = XDocument.Parse(xmlDocument.OuterXml);
}
catch (Exception ex)
{
   Console.WriteLine(ex);
}

【问题讨论】:

  • 这些特殊字符是否仅在文件的开头。如果是这种情况,那么您应该检查具有除 UTF-8 之外的其他编码的文件。它很可能是字节顺序标记,在这种情况下,您应该使用 string inputwithoutspecialchars = System.Text.Encoding.UTF8.GetBytes(input) 并在反序列化期间使用 inputwithoutspecialchars。
  • ReadForFile方法的内容是什么?正如@Soundarajan 所链接的问题所指出的那样,问题的根源可能是错误指定的输入编码,导致输入文件被误解。

标签: c# xmldocument


【解决方案1】:

0x04transmission control character,不能出现在文本字符串中。如果 XmlDocument 确实出现在您的数据中,则拒绝它是正确的。这确实表明您拥有的正则表达式没有做您认为的事情,如果我是对的,那么正则表达式会在行首找到一个或多个无效字符的第一个实例并替换它,但不是他们全部。对我来说真正的问题是为什么这个非文本“字符”首先出现在旨在作为 XML 的数据中。

我还有其他问题。我以前从未见过JsonConvert.DeserializeXmlNode - 我必须查一下它的作用。为什么要针对可能不包含 JSON 的文档的根目录使用 JSON 函数?为什么要获取该文档,将其转换回字符串,然后从中创建 XDocument?为什么不直接创建一个 XDocument?

【讨论】:

    猜你喜欢
    • 2012-06-17
    • 2016-11-14
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 2014-01-29
    • 2013-07-30
    • 1970-01-01
    相关资源
    最近更新 更多