我知道isspace()
它适用于 ASCII,但我有 UTF-8 文本。如果isspace()
仅查看 UTF-8 和 ASCII 重叠的低 7 位,则应该可以安全使用。
安全使用我的意思是它不会将不是空格的 Unicode 字符检测为空格。我知道它可能无法检测到特殊的 Unicode 空格,但这对我来说不是问题。
即我可以接受假阴性,只要没有阳性。假设是正确的吗?
ASCII
这可能是安全的,因为和之间utf-8
的代码点0
和之间绝对没有区别127
。
isspace()
在运行时受制于空白字符的语言环境定义。
setlocale(LC_ALL)
在 C 中,空白字符由调用or时指定的语言环境定义setlocale(LC_CTYPE)
。
在 C++ 中,空白字符由以下任一指定的语言环境定义:
使用来自标头的版本时对std::setlocale(LC_ALL)
or的调用。std::setlocale(LC_CTYPE)
std::isspace()
<cctype>
输入locale
参数,当使用std::isspace()
来自<locale>
标头的版本时。
使用的默认语言环境是"C"
语言环境,它定义了以下空白字符,它们在 UTF-8 和 ASCII 中相同,并且大多数语言环境与 ASCII 兼容,但在其他语言环境中可能不同:
' ' (0x20) 空间 (SPC) '\t' (0x09) 水平制表符 (TAB) '\n' (0x0a) 换行符 (LF) '\v' (0x0b) 垂直制表符 (VT) '\f' (0x0c) 馈送 (FF) '\r' (0x0d) 回车 (CR)