检测编码拉丁语 1 和 UTF-8



我得到的文件可以是拉丁语1或utf8编码。我将其作为 C# 中的流获取。如何检测其拉丁语1("ISO-8859-1"(还是UTF-8?当我尝试检测它时,它总是会将其检测为 UTF-8。 此代码不起作用,如果始终是 UTF-8。

private Encoding GetUtf8EncodeStream(Stream fileStream)
{    
using var reader = new StreamReader(fileStream, true);
var encoding = reader.CurrentEncoding;
if (Equals(encoding, Encoding.UTF8))
{
return Encoding.UTF8;
}
return Encoding.GetEncoding("ISO-8859-1");
}
void Method(){
var encoding = GetUtf8EncodeStream(fileStream);
using (TextReader reader = new StreamReader(fileStream, encoding))
}

我首先需要知道编码,然后我会用该编码来阅读它。

我需要知道编码,因为它有特殊字符 æ、ø 和 å。如果我尝试读取具有编码的流:latin1并将流阅读器设置为 UTF-8,则会有问号而不是字符。如果我这样做相反,我将 StreamWriter 设置为编码 UTF-8,并且它是拉丁语 1,那么地狱将中断失去;)

我找到了解决方案。 :)这个网站给了我正确的答案。 https://archive.codeplex.com/?p=utf8checker

它检查它是否是有效的 UTF-8,而 Latin1 不是。然后我的代码就直截了当了。

private Encoding GetUtf8EncodeStream(Stream fileStream)
{
if (_utf8Checker.IsUtf8(fileStream))
{
return Encoding.UTF8;
}
return Encoding.GetEncoding("ISO-8859-1");
}
var encoding = GetUtf8EncodeStream(stream);
stream.Position = 0;
using (TextReader reader = new StreamReader(stream, encoding))

最新更新