重点:
1.在线检查工具
在线文件编码识别- 在线工具 (bugscaner.com)
2.检查文章链接
C++读取文本文件 ANSI,UNICODE,UTF-8 - 猴子你是猪吗 - 博客园 (cnblogs.com)
3.检查是否是UTF8格式
bool check_utf8_bom(const std::wstring& filename)
{
std::ifstream file(filename, std::ios::binary);
if (!file)
{
std::cerr << "Failed to open file: " << filename.c_str() << std::endl;
return false;
}
// UTF-8 BOM 字节序列为 \xEF\xBB\xBF
static constexpr char bom[] = { '\xEF', '\xBB', '\xBF' };
char buffer[sizeof(bom)];
file.read(buffer, sizeof(buffer));
// 检查读取的前三个字节是否与UTF-8 BOM匹配
return std::equal(std::begin(bom), std::end(bom), buffer);
}
3.检查ANSI = 0,Unicode= 1,UTF8,
typedef enum FileType
{
ANSI = 0,
Unicode= 1,
UTF8,
}FILETYPE;
FILETYPE GetTextFileType(const std::wstring& strFileName)
{
FILETYPE fileType = ANSI;
std::ifstream file;
file.open(strFileName.c_str(), std::ios_base::in);
bool bUnicodeFile = false;
if (file.good())
{
char szFlag[3] = { 0 };
file.read(szFlag, sizeof(char) * 3);
if ((unsigned char)szFlag[0] == 0xFF
&& (unsigned char)szFlag[1] == 0xFE)
{
fileType = Unicode;
}
else if ((unsigned char)szFlag[0] == 0xEF
&& (unsigned char)szFlag[1] == 0xBB
&& (unsigned char)szFlag[2] == 0xBF)
{
fileType = UTF8;
}
}
file.close();
return fileType;
}