isspace()可以使用UTF-8文本给出误报吗?

时间:2016-06-25 12:05:26

标签: c++ utf-8 isspace

我知道isspace()适用于ASCII,但我有UTF-8文本。如果isspace()仅查看低7位,UTF-8和ASCII重叠,则应该可以安全使用。

安全使用我的意思是它不会检测到像空白一样不是空格的Unicode字符。我知道可能会有一些特殊的Unicode空格无法检测到,但对我来说这不是问题。

即。只要没有积极因素,我就可以使用假阴性。假设这是正确的吗?

2 个答案:

答案 0 :(得分:2)

这可能是安全的,因为ASCIIutf-8之间的代码点在0127之间绝对没有区别。

答案 1 :(得分:1)

isspace()受运行时空白字符的区域设置定义的约束。

在C中,空格字符由调用setlocale(LC_ALL)setlocale(LC_CTYPE)中指定的区域设置定义。

在C ++中,空格字符由以下任一指定的语言环境定义:

  1. 在使用std::setlocale(LC_ALL)标题中的std::setlocale(LC_CTYPE)版本时,对std::isspace()<cctype>的调用。

  2. 输入locale参数,当使用std::isspace()标题中的<locale>版本时。

  3. 使用的默认语言环境是"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)