isspace()可以对UTF-8文本给出假阳性吗?
Can isspace() give false positives with UTF-8 text?
我知道isspace()
是为ASCII工作的,但我有UTF-8文本。如果isspace()
只查看UTF-8和ASCII重叠的低7位,则使用它应该是安全的。
使用安全是指它不会将非空白的Unicode字符检测为空白。我知道可能会有特殊的Unicode空白,它不会检测到,但这对我来说不是问题。
。我可以接受假阴性,只要没有阳性。这样假设正确吗?
isspace()
受运行时空白字符的区域设置定义的约束。
在C语言中,空白字符由调用setlocale(LC_ALL)
或setlocale(LC_CTYPE)
时指定的语言环境定义。
在c++中,空白字符由指定的区域设置定义:
-
当使用
<cctype>
报头的std::isspace()
版本时,对std::setlocale(LC_ALL)
或std::setlocale(LC_CTYPE)
的调用 -
当使用
<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) 这可能是安全的,因为0
和127
之间的代码点在ASCII
和utf-8
之间绝对没有区别。
相关文章:
- 如何将 UTF-8 文本从文件转换为某个可以迭代的容器,并检查每个符号是否为C++字母数字?
- 通过分隔符分隔包含 UTF-16 BE 文本的uint8_t数组
- 如何在C 17中读取UTF-16文本文件
- UTF-16LE 编码问题与 Qt 文本编辑器用 C++ 编写
- Arduino UCS2至UTF文本形式
- 有关读取 UTF-8 编码文本时 Ifstream get() 方法行为的说明 (C++)
- 使用标准C++无线流读取UTF-8文本并转换为UTF-16
- 为什么我不能在窗口上使用 boost::locale::conv::between 将 UTF-16 文本转换为其他编码
- 使用atlcov.h/W2A和中文文本的C++Utf-8转换
- 从包含 utf-8(印地语)格式文本的文件读取并写入其他文件
- 字符类型并将 ASCII 文本重新编码为 UTF-16
- 在编译/运行时将字符串文本的原始字节流入/流出Windows(非宽)执行字符集,以及ANSI代码页与UTF-8
- 在没有外部库的情况下将 utf-16 文本文件正确读取到字符串中
- 我可以使用哪个库发送包含UTF文本和文件附件的SMTP/MIME电子邮件
- 如何检查文本文件是否使用UTF-8编码
- 如何将std::string中包含utf-16编码的文本转换为utf-16 wstring
- c++中utf -16编码文本的截断读取
- 如何在UTF-8文本中搜索行结束符(' ') ?
- 什么是用于 UTF-8/UTF-16 文本编码C++小型 LGPL 库?
- C++11:普通字符串文本和 UTF-8 字符串文本之间的差异示例