我得到的文件可以是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中,那么地狱将会失败;)
发布于 2020-05-28 16:57:32
我找到了一个解决方案。:)这个网站给了我正确的答案。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))https://stackoverflow.com/questions/62059404
复制相似问题