2

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

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

即我可以接受假阴性,只要没有阳性。假设是正确的吗?

4

2 回答 2

2

ASCII这可能是安全的,因为和之间utf-8的代码点0和之间绝对没有区别127

于 2016-06-25T12:08:58.940 回答
2

isspace()在运行时受制于空白字符的语言环境定义。

setlocale(LC_ALL)在 C 中,空白字符由调用or时指定的语言环境定义setlocale(LC_CTYPE)

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

  1. 使用来自标头的版本时对std::setlocale(LC_ALL)or的调用。std::setlocale(LC_CTYPE)std::isspace()<cctype>

  2. 输入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)
于 2016-06-30T21:02:29.580 回答