C++ isspace()是否可以对UTF-8文本进行误报?

C++ isspace()是否可以对UTF-8文本进行误报?,c++,utf-8,isspace,C++,Utf 8,Isspace,我知道isspace是为ASCII工作的,但我有UTF-8文本。如果isspace只查看UTF-8和ASCII重叠的较低7位,那么使用它应该是安全的 通过安全使用,我的意思是它不会检测到不是空白的Unicode字符作为空白。我知道可能会有一些特殊的Unicode空白,它不会检测到,但这对我来说不是问题 也就是说,我可以接受假阴性,只要没有阳性。假设0和127之间的代码点在ASCII和utf-8之间完全没有区别,这可能是安全的。isspace在运行时受空白字符的区域设置定义的约束 在C语言中,空白

我知道isspace是为ASCII工作的,但我有UTF-8文本。如果isspace只查看UTF-8和ASCII重叠的较低7位,那么使用它应该是安全的

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


也就是说,我可以接受假阴性,只要没有阳性。假设0和127之间的代码点在ASCII和utf-8之间完全没有区别,这可能是安全的。isspace在运行时受空白字符的区域设置定义的约束

在C语言中,空白字符由调用setlocaleLC_ALL或setlocaleLC_CTYPE时指定的语言环境定义

在C++中,空白字符由由//P>指定的区域定义。 从标头使用std::isspace版本时,调用std::setlocaleLC_ALL或std::setlocaleLC_CTYPE

使用标头中std::isspace版本时的输入区域设置参数

使用的默认语言环境是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)
is空格适用于任何固定宽度的单字节字符集,其中ASCII是最常见的,但决不是唯一的示例。在使用非ASCII字符集的系统上,它将为该字符集给出适当的答案,而不是ASCII。@PeteBecker有现代的非ASCII系统吗?我听说过EBCDIC,但据我所知,那个是很古老的时代,当时事情还并没有标准化。问题错了。如果你是基于整个世界都是ASCII的观点来做出设计和编码决策的,你最好能够证明这一点。“其他任何东西都不是工程。”彼得·贝克尔好的,我会记住的。我需要的代码只能在x86 PC上的Linux上运行,因此至少就我而言,我确信它将是ASCII码。这是一个毫无意义的参数,UTF-8只意味着一件事,它与任何传统的8位编码都有关系。这是一种Unicode编码,旨在消除歧义。如果你根本不在乎排版的准确性,那就不用麻烦了,用==''。它永远不会匹配utf-8序列的一部分,第二个字节和后续字节的MSB都已打开。例如,EBCDIC和utf-8之间存在很大差异,在使用EBCDIC作为其本机编码的系统上,isspace不会给出对ASCII或utf-8有任何意义的答案。但isspace是否检查127以上的任何内容?这是我不确定的部分。检查。它返回除U+FEFF之外的所有值。