isspace() 能否对 UTF-8 文本给出误报?

Can isspace() give false positives with UTF-8 text?

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

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

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

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

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

在 C 中,空白字符由调用 setlocale(LC_ALL)setlocale(LC_CTYPE).

时指定的语言环境定义

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

  1. 调用 std::setlocale(LC_ALL)std::setlocale(LC_CTYPE),当使用来自 <cctype> header 的 std::isspace() 版本时。

  2. 一个输入 locale 参数,当使用来自 <locale> header.

    [=39 的 std::isspace() 版本时=]

使用的默认语言环境是"C"语言环境,它定义了以下空白字符,在UTF-8和ASCII中是相同的,大多数 语言环境是ASCII-compatible,但在其他语言环境中可能不同:

' '  (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)