我正在获取可以是latin1或utf8编码的文件。我在C#中将其作为流获取。如何检测其latin1(“ 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并将streamreader设置为UTF-8,将出现问号而不是字符。如果我将其设置为将StreamWriter设置为对UTF-8进行编码,那么它会在latin1中逆转;)
我找到了解决方案。 :)这个网站给了我正确的答案。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))