以下是一个用于区分文件编码的 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 编码'。

C++ 代码识别无 BOM UTF-16LE 和 UTF-16BE 编码文件

原文地址: https://www.cveoy.top/t/topic/p96m 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录