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,谢谢。我读了它,学到了更多