isspace() 能否对 UTF-8 文本给出误报?
Can isspace() give false positives with UTF-8 text?
我知道 isspace()
适用于 ASCII,但我有 UTF-8 文本。如果isspace()
只看UTF-8和ASCII重叠的低7位,应该可以安全使用。
安全使用是指它不会将不是空格的 Unicode 字符检测为空格。我知道可能存在它无法检测到的特殊 Unicode 空格,但这对我来说不是问题。
即我可以接受假阴性,只要没有阳性。这样的假设是否正确?
这可能是安全的,因为对于 0
和 127
之间的代码点,ASCII
和 utf-8
之间绝对没有区别。
isspace()
受制于运行时空白字符的语言环境定义。
在 C 中,空白字符由调用 setlocale(LC_ALL)
或 setlocale(LC_CTYPE)
.
时指定的语言环境定义
在 C++ 中,空白字符由指定的语言环境定义:
调用 std::setlocale(LC_ALL)
或 std::setlocale(LC_CTYPE)
,当使用来自 <cctype>
header 的 std::isspace()
版本时。
一个输入 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)
我知道 isspace()
适用于 ASCII,但我有 UTF-8 文本。如果isspace()
只看UTF-8和ASCII重叠的低7位,应该可以安全使用。
安全使用是指它不会将不是空格的 Unicode 字符检测为空格。我知道可能存在它无法检测到的特殊 Unicode 空格,但这对我来说不是问题。
即我可以接受假阴性,只要没有阳性。这样的假设是否正确?
这可能是安全的,因为对于 0
和 127
之间的代码点,ASCII
和 utf-8
之间绝对没有区别。
isspace()
受制于运行时空白字符的语言环境定义。
在 C 中,空白字符由调用 setlocale(LC_ALL)
或 setlocale(LC_CTYPE)
.
在 C++ 中,空白字符由指定的语言环境定义:
调用
std::setlocale(LC_ALL)
或std::setlocale(LC_CTYPE)
,当使用来自<cctype>
header 的std::isspace()
版本时。一个输入
[=39 的locale
参数,当使用来自<locale>
header.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)