如何在 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 可能是讨论这个问题的更好地方。
有很多题要求检测文件编码,比较棘手。我只需要知道文件是否仅包含有效的 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 可能是讨论这个问题的更好地方。