这是我的情况:我需要正确确定哪个字符编码用于给定的文本文件.希望它能正确返回以下类型之一:
enum CHARACTER_ENCODING
{
ANSI,
Unicode,
Unicode_big_endian,
UTF8_with_BOM,
UTF8_without_BOM
};
Run Code Online (Sandbox Code Playgroud)
到目前为止,我可以正确地告诉文本文件Unicode,Unicode big endian或者UTF-8 with BOM通过调用以下函数.它还可以正确地确定ANSI给定的文本文件是否最初不是UTF-8 without BOM.问题是,当文本文件是UTF-8 without BOM,以下函数将错误地将其视为ANSI文件.
CHARACTER_ENCODING get_text_file_encoding(const char *filename)
{
CHARACTER_ENCODING encoding;
unsigned char uniTxt[] = {0xFF, 0xFE};// Unicode file header
unsigned char endianTxt[] = {0xFE, 0xFF};// Unicode big endian file header
unsigned char utf8Txt[] = {0xEF, 0xBB};// UTF_8 file header
DWORD dwBytesRead = 0;
HANDLE hFile = CreateFile(filename, GENERIC_READ, FILE_SHARE_READ, …Run Code Online (Sandbox Code Playgroud)