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

可以安全使用,是指它不会将非空白的Unicode字符检测为空白。我知道可能存在无法检测到的特殊Unicode空格,但这对我来说不是问题。

即只要没有肯定的判断,我可以接受错误的否定判断。假设是正确的吗?

最佳答案

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

在C语言中,空格字符由对setlocale(LC_ALL)setlocale(LC_CTYPE)的调用中指定的语言环境定义。

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

  • 使用std::setlocale(LC_ALL) header 中的std::setlocale(LC_CTYPE)版本时,对std::isspace()<cctype>的调用。
  • 使用locale header 中的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)

    关于c++ - isspace()是否可以使用UTF-8文本给出误报?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38028343/

    10-10 22:41