如何判断txt文件编码

时间:2011-06-16 02:09:20

标签: c# encoding

  

可能重复:
  How can I detect the encoding/codepage of a text file

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

不幸的是,有许多txt编码文件。我无法使用特定的编码来阅读它。

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

2 个答案:

答案 0 :(得分:2)

在这里看到这个答案:

How can I detect the encoding/codepage of a text file

  

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

及其链接的文章:

http://www.joelonsoftware.com/printerFriendly/articles/Unicode.html

  

关于编码的最重要事实

     

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

     

如果您有字符串,内存,文件或电子邮件消息,则必须知道它所使用的编码,或者您无法解释它或正确地将其显示给用户。

答案 1 :(得分:2)

在@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;
}