首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测编码Latin1和UTF-8

检测编码Latin1和UTF-8
EN

Stack Overflow用户
提问于 2020-05-28 15:38:59
回答 1查看 262关注 0票数 0

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

代码语言:javascript
复制
     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中,那么地狱将会失败;)

EN

回答 1

Stack Overflow用户

发布于 2020-05-28 16:57:32

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

它检查它是否是有效UTF-8,而Latin1不是。然后我的代码就简单明了了。

代码语言:javascript
复制
    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))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62059404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档