#include \n#include \n#include \n#include \n\n// 判断UTF16LE编码\nbool isUTF16LE(const std::vector& data) {\n if (data.size() < 2) {\n return false;\n }\n return (data[1] == 0x00 && data[0] != 0x00);\n}\n\n// 判断UTF16BE编码\nbool isUTF16BE(const std::vector& data) {\n if (data.size() < 2) {\n return false;\n }\n return (data[0] == 0x00 && data[1] != 0x00);\n}\n\n// 判断UTF32LE编码\nbool isUTF32LE(const std::vector& data) {\n if (data.size() < 4) {\n return false;\n }\n return (data[3] == 0x00 && data[2] == 0x00 && data[1] != 0x00 && data[0] != 0x00);\n}\n\n// 判断UTF32BE编码\nbool isUTF32BE(const std::vector& data) {\n if (data.size() < 4) {\n return false;\n }\n return (data[0] == 0x00 && data[1] == 0x00 && data[2] != 0x00 && data[3] != 0x00);\n}\n\n// 判断UTF8编码\nbool isUTF8(const std::vector& data) {\n if (data.empty()) {\n return false;\n }\n if (data[0] <= 0x7F) {\n return true;\n }\n if (data.size() < 2) {\n return false;\n }\n if (data[0] >= 0xC2 && data[0] <= 0xDF && data[1] >= 0x80 && data[1] <= 0xBF) {\n return true;\n }\n if (data.size() < 3) {\n return false;\n }\n if (data[0] == 0xE0 && data[1] >= 0xA0 && data[1] <= 0xBF && data[2] >= 0x80 && data[2] <= 0xBF) {\n return true;\n }\n if (data[0] >= 0xE1 && data[0] <= 0xEC && data[1] >= 0x80 && data[1] <= 0xBF && data[2] >= 0x80 && data[2] <= 0xBF) {\n return true;\n }\n if (data[0] == 0xED && data[1] >= 0x80 && data[1] <= 0x9F && data[2] >= 0x80 && data[2] <= 0xBF) {\n return true;\n }\n if (data.size() < 4) {\n return false;\n }\n if (data[0] == 0xEE && data[1] >= 0x80 && data[1] <= 0xBF && data[2] >= 0x80 && data[2] <= 0xBF && data[3] >= 0x80 && data[3] <= 0xBF) {\n return true;\n }\n if (data[0] >= 0xEF && data[0] <= 0xF0 && data[1] >= 0x80 && data[1] <= 0xBF && data[2] >= 0x80 && data[2] <= 0xBF && data[3] >= 0x80 && data[3] <= 0xBF) {\n return true;\n }\n return false;\n}\n\n// 判断GB2312编码\nbool isGB2312(const std::vector& data) {\n if (data.empty()) {\n return false;\n }\n if (data[0] >= 0xB0 && data[0] <= 0xF7 && data[1] >= 0xA1 && data[1] <= 0xFE) {\n return true;\n }\n return false;\n}\n\nint main() {\n std::string input;\n std::cout << "请输入一个字符串: ";\n std::getline(std::cin, input);\n \n std::vector data(input.begin(), input.end());\n\n bool isUTF16LE = isUTF16LE(data);\n bool isUTF16BE = isUTF16BE(data);\n bool isUTF32LE = isUTF32LE(data);\n bool isUTF32BE = isUTF32BE(data);\n bool isUTF8 = isUTF8(data);\n bool isGB2312 = isGB2312(data);\n\n std::cout << "编码格式判断结果:" << std::endl;\n std::cout << "UTF16LE: " << (isUTF16LE ? "是" : "否") << std::endl;\n std::cout << "UTF16BE: " << (isUTF16BE ? "是" : "否") << std::endl;\n std::cout << "UTF32LE: " << (isUTF32LE ? "是" : "否") << std::endl;\n std::cout << "UTF32BE: " << (isUTF32BE ? "是" : "否") << std::endl;\n std::cout << "UTF8: " << (isUTF8 ? "是" : "否") << std::endl;\n std::cout << "GB2312: " << (isGB2312 ? "是" : "否") << std::endl;\n\n return 0;\n}

C++ 字符编码检测:UTF-16、UTF-32、UTF-8、GB2312

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

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