我知道isspace()
适用于ASCII,但我有UTF-8文本。如果isspace()
仅查看低7位,UTF-8和ASCII重叠,则应该可以安全使用。
安全使用我的意思是它不会检测到像空白一样不是空格的Unicode字符。我知道可能会有一些特殊的Unicode空格无法检测到,但对我来说这不是问题。
即。只要没有积极因素,我就可以使用假阴性。假设这是正确的吗?
答案 0 :(得分:2)
这可能是安全的,因为ASCII
和utf-8
之间的代码点在0
和127
之间绝对没有区别。
答案 1 :(得分:1)
isspace()
受运行时空白字符的区域设置定义的约束。
在C中,空格字符由调用setlocale(LC_ALL)
或setlocale(LC_CTYPE)
中指定的区域设置定义。
在C ++中,空格字符由以下任一指定的语言环境定义:
在使用std::setlocale(LC_ALL)
标题中的std::setlocale(LC_CTYPE)
版本时,对std::isspace()
或<cctype>
的调用。
输入locale
参数,当使用std::isspace()
标题中的<locale>
版本时。
使用的默认语言环境是"C"
语言环境,它定义了以下空格字符,这些字符在UTF-8和ASCII中相同,而大多数与ASCII兼容的语言环境,但在其他语言环境中可能有所不同:
' ' (0x20) space (SPC) '\t' (0x09) horizontal tab (TAB) '\n' (0x0a) newline (LF) '\v' (0x0b) vertical tab (VT) '\f' (0x0c) feed (FF) '\r' (0x0d) carriage return (CR)