65,153
社区成员




Windows平台的fopen设定了unicode模式是能识别BOM的,那有什么函数能从打开的FILE获取他到底是什么编码?
二进制打开判断都几个字符,如果不是明确的BOM,就只能根据内容猜了,尝试转一下,如果没有出错就可能是对的。
下面的代码可以区分Unicode、UTF-8-BOM、ANSI编码:
#include <fstream>
#include <iostream>
using namespace std;
int main()
{
ifstream fin("D:/project/c1/1.txt", ios::binary);
unsigned char s2;
fin.read((char *)&s2, sizeof(s2));
int p = s2 << 8;
fin.read((char *)&s2, sizeof(s2));
p += s2;
string code;
switch (p)
{
case 0xfffe:
code = "Unicode"; // UCS-2 Little Endian编码
break;
case 0xfeff:
code = "Unicode big endian"; // UCS-2 Big Endian编码
break;
case 0xefbb:
code = "UTF-8"; // UTF-8-BOM编码
break;
default:
code = "ANSI";
break;
}
fin.close();
cout << "file's encoding:" << code << endl;
return 0;
}