C++ 代码识别无 BOM UTF-16LE 和 UTF-16BE 编码文件
以下是一个用于区分文件编码的 C++ 代码示例:
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
bool isUTF16LE(const std::vector<uint8_t>& fileData) {
// UTF-16LE 文件的前两个字节应该是 0xFF 0xFE
if (fileData.size() >= 2 && fileData[0] == 0xFF && fileData[1] == 0xFE) {
return true;
}
return false;
}
bool isUTF16BE(const std::vector<uint8_t>& fileData) {
// UTF-16BE 文件的前两个字节应该是 0xFE 0xFF
if (fileData.size() >= 2 && fileData[0] == 0xFE && fileData[1] == 0xFF) {
return true;
}
return false;
}
int main() {
std::string filename = 'example.txt'; // 替换为实际的文件名
std::ifstream file(filename, std::ios::binary);
if (!file) {
std::cout << '无法打开文件' << std::endl;
return 1;
}
// 读取文件内容
std::vector<uint8_t> fileData((std::istreambuf_iterator<char>(file)),
std::istreambuf_iterator<char>());
// 判断文件编码
if (isUTF16LE(fileData)) {
std::cout << '文件是无BOM UTF-16LE 编码' << std::endl;
} else if (isUTF16BE(fileData)) {
std::cout << '文件是无BOM UTF-16BE 编码' << std::endl;
} else {
std::cout << '文件不是 UTF-16 编码' << std::endl;
}
return 0;
}
请将 'example.txt' 替换为实际的文件名,并根据实际情况修改代码。代码通过读取文件内容,并检查文件的前两个字节来判断文件编码是否为 UTF-16LE 或 UTF-16BE。如果文件是 UTF-16 编码,它将打印相应的信息。如果不是 UTF-16 编码,它将打印 '文件不是 UTF-16 编码'。
原文地址: https://www.cveoy.top/t/topic/p96m 著作权归作者所有。请勿转载和采集!