Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从字符串EOT逗号ETX中删除控制字符序列_C#_Xml - Fatal编程技术网

C# 从字符串EOT逗号ETX中删除控制字符序列

C# 从字符串EOT逗号ETX中删除控制字符序列,c#,xml,C#,Xml,我有一些xml文件,其中一些控制序列包含在文本中:EOT,ETX(另一个字符) EOT逗号ETX后面的另一个字符并不总是存在,也不总是相同的。 实例: <FatturaElettronicaHeader xmlns=""> </F<EOT>‚<ETX>èatturaElettronicaHeader> 因此,我需要删除所有此类控制字符序列才能解析此类文件,我不确定如何通过编程检查字符是否属于控制序列。我发现我的文件中有两种错误模式:第一种是标题中

我有一些xml文件,其中一些控制序列包含在文本中:EOT,ETX(另一个字符) EOT逗号ETX后面的另一个字符并不总是存在,也不总是相同的。 实例:

<FatturaElettronicaHeader xmlns="">
</F<EOT>‚<ETX>èatturaElettronicaHeader>

因此,我需要删除所有此类控制字符序列才能解析此类文件,我不确定如何通过编程检查字符是否属于控制序列。

我发现我的文件中有两种错误模式:第一种是标题中的模式,第二种是
EOT=32u)&&(num很抱歉延迟响应,
但在我看来,问题的根源可能是p7m文件的错误解码。
我认为最初您试图清理的xml文件是一个.xml.p7m文件。
我认为清理文件的正确方法是使用库,如java或dotnet中的BuoncCastle和类CmsSignedData

                CmsSignedData cmsObj = new CmsSignedData(content);
                if (cmsObj.SignedContent != null)
                {
                    using (var stream = new MemoryStream())
                    {
                        cmsObj.SignedContent.Write(stream);
                        content = stream.ToArray();
                    }
                }

您能够更改源系统(生成XML的系统)吗要修复缺陷吗?不,不幸的是,源系统是另一家公司的API。我不确定这类字符用于什么。xml中使用哪种编码?示例:
我更新了答案,解决了问题请将您的答案添加为答案,而不是添加到问题中(然后将其标记为答案)。
private static string RemoveInvalidCharacters(string input)
        {
            while (true)
            {
                var start = input.IndexOf('\u0004');
                if (start == -1) break;
                if (input[start + 1] == '<')
                {
                    input = input.Remove(start, 2);
                    continue;
                }
                if (input[start + 2] == '\u0003')
                {
                    input = input.Remove(start, 4);
                }
            }
            return input;
        }
static string StripExtended(string arg)
        {
            StringBuilder buffer = new StringBuilder(arg.Length); //Max length
            foreach (char ch in arg)
            {
                UInt16 num = Convert.ToUInt16(ch);//In .NET, chars are UTF-16
                //The basic characters have the same code points as ASCII, and the extended characters are bigger
                if ((num >= 32u) && (num <= 126u)) buffer.Append(ch);
            }
            return buffer.ToString();
        }
                CmsSignedData cmsObj = new CmsSignedData(content);
                if (cmsObj.SignedContent != null)
                {
                    using (var stream = new MemoryStream())
                    {
                        cmsObj.SignedContent.Write(stream);
                        content = stream.ToArray();
                    }
                }