Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何判断一个txt文件的编码_C#_Encoding - Fatal编程技术网

C# 如何判断一个txt文件的编码

C# 如何判断一个txt文件的编码,c#,encoding,C#,Encoding,可能重复: 我一直在开发winform系统。并且需要读取txt文件 不幸的是,有许多txt编码的文件。我不能用特定的编码读取它 问题是如何判断txt文件编码。请参见以下答案: 你无法检测到代码页,你需要被告知它。您可以分析字节并猜测它,但这可能会产生一些奇怪(有时很有趣)的结果。我现在找不到它,但我肯定记事本会被欺骗,用中文显示英文文本 以及它链接到的文章: 关于编码的一个最重要的事实 如果你完全忘记了我刚才解释的一切,请记住一个极其重要的事实。在不知道使用什么编码的情况下使用字符串是没有

可能重复:

我一直在开发winform系统。并且需要读取txt文件

不幸的是,有许多txt编码的文件。我不能用特定的编码读取它

问题是如何判断txt文件编码。

请参见以下答案:

你无法检测到代码页,你需要被告知它。您可以分析字节并猜测它,但这可能会产生一些奇怪(有时很有趣)的结果。我现在找不到它,但我肯定记事本会被欺骗,用中文显示英文文本

以及它链接到的文章:

关于编码的一个最重要的事实

如果你完全忘记了我刚才解释的一切,请记住一个极其重要的事实。在不知道使用什么编码的情况下使用字符串是没有意义的。你不能再把头埋在沙子里,假装“纯”文本是ASCII码。没有纯文本这种东西

如果内存、文件或电子邮件中有字符串,则必须知道其编码方式,否则无法正确解释或显示给用户


在@Gens和@Samuel Neff的提示下,我解决了这个问题。 这是我的密码

public static Encoding GetFileEncoding(string srcFile)
{
 // *** Use Default of Encoding.Default (Ansi CodePage)
            Encoding encoding = Encoding.Default;
            using (FileStream stream = File.OpenRead(fileName))
            {
                // *** Detect byte order mark if any - otherwise assume default
                byte[] buff = new byte[5];
                stream.Read(buff, 0, buff.Length);
                if (buff[0] == 0xEF && buff[1] == 0xBB && buff[2] == 0xBF)
                {
                    encoding = Encoding.UTF8;
                }
                else if (buff[0] == 0xFE && buff[1] == 0xFF)
                {
                    encoding = Encoding.BigEndianUnicode;
                }
                else if (buff[0] == 0xFF && buff[1] == 0xFE)
                {
                    encoding = Encoding.Unicode;
                }
                else if (buff[0] == 0 && buff[1] == 0 && buff[2] == 0xFE && buff[3] == 0xFF)
                {
                    encoding = Encoding.UTF32;
                }
                else if (buff[0] == 0x2B && buff[1] == 0x2F && buff[2] == 0x76)
                {
                    encoding = Encoding.UTF7;
                }
            }
            return encoding;
}

@Gens,BOM是用于指定文件结尾的Unicode编码文件。这与编码不同,编码可以是任何东西,包括非Unicode。谢谢。在你的提示下,我找到了一个解决方法。+1这是黄金我想建议一些类似的“魔法”,但它用于检测MIME类型。这是一个名为Winista的库,对于无法检测到的文件,我默认使用URLMon,请参见此处:@Jeremy Thompson,谢谢。我读了它,学到了更多