gpt4 book ai didi

c# - 如何删除某些文本中存在的任何 UTF-8 BOM,而不是某些文本的开头

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

我们收到一些文件,这些文件已由另一方连接。在这些文件的中间是一些 BOM 字符。

有没有办法检测这 3 个字符并将其删除?我已经看到很多关于如何从文件的 -start- 但不是中间删除 BOM 的示例。

最佳答案

假设您的文件足够小,可以保存在内存中,并且您有一个 Enumerable.Replace 扩展方法来替换子序列,那么您可以使用:

var bytes = File.ReadAllBytes(filePath);
var bom = new byte[] { 0xEF, 0xBB, 0xBF };
var empty = Enumerable.Empty<byte>();
bytes = bytes.Replace(bom, empty).ToArray();
File.WriteAllBytes(filePath, bytes);

这是 Replace 扩展方法的简单(低效)实现:

public static IEnumerable<TSource> Replace<TSource>(
this IEnumerable<TSource> source,
IEnumerable<TSource> match,
IEnumerable<TSource> replacement)
{
return Replace(source, match, replacement, EqualityComparer<TSource>.Default);
}

public static IEnumerable<TSource> Replace<TSource>(
this IEnumerable<TSource> source,
IEnumerable<TSource> match,
IEnumerable<TSource> replacement,
IEqualityComparer<TSource> comparer)
{
int sLength = source.Count();
int mLength = match.Count();

if (sLength < mLength || mLength == 0)
return source;

int[] matchIndexes = (
from sIndex in Enumerable.Range(0, sLength - mLength + 1)
where source.Skip(sIndex).Take(mLength).SequenceEqual(match, comparer)
select sIndex
).ToArray();

var result = new List<TSource>();
int sPosition = 0;
foreach (int mPosition in matchIndexes)
{
var sPart = source.Skip(sPosition).Take(mPosition - sPosition);
result.AddRange(sPart);
result.AddRange(replacement);
sPosition = mPosition + mLength;
}

var sLastPart = source.Skip(sPosition).Take(sLength - sPosition);
result.AddRange(sLastPart);
return result;
}

关于c# - 如何删除某些文本中存在的任何 UTF-8 BOM,而不是某些文本的开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25228263/

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