请教怎么判断一个txt文件的编码格式?(头2个类型判断字节没有的那种)

请问如何判断一个txt文件的编码格式?(头2个类型判断字节没有的那种)
上网搜了下方法,都说txt文件的头几个字节是编码格式
头2个字节如果是 fe ff 表示编码格式为unicode big endian;
头2个字节如果是 ff fe 表示 unicode;
头3个字节如果是 ef bb bf 表示 utf-8;

可是有些txt文件没有上面这种编码类型头,而记事本和ultra edit也可以正常打开,请问它们是根据什么判断编码的?
------解决方案--------------------
ANSI,UTF-8一个是单字节,一个是多字节,可以尝试两种方式转换看哪种对
------解决方案--------------------
没有格式的文本编码,只有通过编码范围去尝试,不一定准确。
------解决方案--------------------
这些都是有头文件格式的。。
------解决方案--------------------
/*
EF BB BF    UTF-8  
FE FF     UTF-16/UCS-2, little endian  
FF FE     UTF-16/UCS-2, big endian  
FF FE 00 00  UTF-32/UCS-4, little endian.  
00 00 FE FF  UTF-32/UCS-4, big-endian.
*/

------解决方案--------------------
如果你的文档只是程序使用而非人工阅读的,无所谓什么编码方式,怎么写进去的怎么读出来
------解决方案--------------------
先检查头几个字节。
没有的话用
BOOL IsTextUnicode(  CONST VOID* pBuffer,  int cb, LPINT lpi );

99%都可以检测出来。

著名的联通bug,已经决定了无法100%检测。
------解决方案--------------------
IsTextUnicode  应该是系统函数吧