gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 14:46:03 24 4
gpt4 key购买 nike

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

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

在哪里<EOT>是 04 字符和 <ETX>是 03。因为我必须解析 xml,这实际上是一个大问题。这是我从未听说过的某种编码吗?

我已尝试从我的字符串中删除所有控制字符,但它会留下仍然不需要的逗号。如果我使用 Encoding.ASCII.GetString(file);不需要的字符将被替换为“?”这很容易删除,但它仍然会留下一些不需要的字符,导致解析问题:

<BIC></WBIC>像这样。

string xml = Encoding.ASCII.GetString(file);
xml = new string(xml.Where(cc => !char.IsControl(cc)).ToArray());

因此,我需要删除所有此类控制字符序列才能解析此类文件,而且我不确定如何以编程方式检查字符是否是控制序列的一部分。

最佳答案

我发现我的文件中有两个错误模式:第一个是标题中的那个,第二个是EOT<。 .为了让它工作,我查看了这个线程:Remove substring that starts with SOT and ends EOT, from string

稍微修改一下代码

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();
}

现在一切看起来都可以解析了。

关于c# - 从字符串 EOT 逗号 ETX 中删除控制字符序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54168995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com