Auto encoding detect in C#
Possible Duplicate:
Determine a string's encoding in C#
许多文本编辑器(如记事本++)可以检测任意文件的编码。我可以检测到C中文件的编码吗?
- 你在网上搜索过C中编码检测的例子吗?
- stackoverflow.com/questions/1025332/…副本
如果尝试读取时存在物料清单,streamreader将尝试自动检测文件的编码:
1 2 3 4 5 6 7 8 9 10 11 12 13
| public class Program
{
static void Main (string[] args )
{
using (var reader = new StreamReader ("foo.txt"))
{
// Make sure you read from the file or it won't be able
// to guess the encoding
var file = reader .ReadToEnd();
Console .WriteLine(reader .CurrentEncoding);
}
}
} |
- +1,尽管值得一提的是,这并非万无一失;许多编码"看起来"与使用的简单检测方法相同。即使是最好的(像google这样的公司可以处理大量的数据,并且有大量的数据来比较数据流)也会考虑"高"八位字节的不同含义,但这并不是百分之百的完美。如果可能的话,最好能准确地传达这些信息。
- 它适用于普通编码,但不适用于所有编码。
- 如果没有BOM,这将无法检测UTF 16。如果检测不到任何Unicode编码,它也不会返回到用户的本地默认代码页。您可以修复后者,但是如果没有BOM,它就不会检测到UTF8。
- StreamReader不试图检测编码,它只是使用默认值。查看您链接的文档,其中显示:"使用默认字符编码和默认缓冲区大小。"
- msdn文档确实说明将使用默认的字符编码,但我尝试将不同的bom传递给streamreader,它正确地标识了它们(即reader.currenteencoding返回了预期的编码)。我测试了utf-8、utf-16-be和utf-16le。不过,请注意@darin的评论——如果你不阅读一些数据,它就不起作用了。
- reader.peek()足够了