如何在 C# 中验证 Stream 是有效的 UTF8

How to validate a Stream is valid UTF8 in c#

有很多题要求检测文件编码,比较棘手。我只需要知道文件是否仅包含有效的 UTF8 序列,因此可以安全地视为 UTF8(纯 ASCII 可以安全地视为 UTF8)

文件以 Stream 的形式出现在 AspNetCore.

我假设我必须读取流两次,首先检查它不包含任何无效的 UTF8 序列,然后进一步实际处理它。

根据@madreflection 的评论:

public static async Task<bool> IsValidUtf8(Stream stream)
{
    var reader = new StreamReader(stream, new UTF8Encoding(true, true));
    try
    {
        await reader.ReadToEndAsync();
        return true;
    }
    catch (DecoderFallbackException)
    {
        return false;
    }
}

我希望我不必两次读取流,但这是不可能的,但也是不希望的,因为我需要在处理之前做出决定。

让我困扰的一件事是整个流都被读入 RAM,但 CodeReview 可能是讨论这个问题的更好地方。