正如几条评论所建议的以及 @CrisLuengo 答案所强调的,我们可以迭代字符来查找高位集中的任何字符(实时示例):
\n\n#include <iostream>\n#include <string>\n#include <algorithm>\n\nbool isASCII (const std::string& s)\n{\n return !std::any_of(s.begin(), s.end(), [](char c) { \n return static_cast<unsigned char>(c) > 127; \n });\n}\n\nint main()\n{\n std::string s1 { "C:\\\\Users\\\\myUser\\\\Downloads\\\\Hello my friend.pdf" }; \n std::string s2 { "C:\\\\Users\\\\myUser\\\\Downloads\\\\\xc3\xbc.pdf" };\n\n std::cout << std::boolalpha << isASCII(s1) << "\\n";\n std::cout << std::boolalpha << isASCII(s2) << "\\n";\n}\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n真的
\n\n错误的
\n
ASCII 字符仅使用 a 的低 7 位char(值 0-127)。以 UTF-8 编码的非 ASCII Unicode 字符使用的char元素都设置了高位。因此,您可以简单地迭代char元素,看看它们中是否有任何一个值大于 127,例如:
bool containsOnlyASCII(const std::string& filePath) {
for (auto c: filePath) {
if (static_cast<unsigned char>(c) > 127) {
return false;
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
关于演员表的说明:std::string包含char元素。该标准没有定义char是signed还是unsigned。如果是signed,那么我们可以以unsigned明确定义的方式将其转换为 。该标准具体规定了如何做到这一点。