Detect编码Latin1和UTF-8

问题描述 投票:0回答:1

我正在获取可以是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中逆转;)

c# encoding utf-8 iso-8859-1 utf8mb4
1个回答
0
投票

我找到了解决方案。 :)这个网站给了我正确的答案。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))
© www.soinside.com 2019 - 2024. All rights reserved.