【发布时间】:2016-06-25 12:05:25
【问题描述】:
我知道isspace() 适用于 ASCII,但我有 UTF-8 文本。如果isspace() 只查看低 7 位,也就是 UTF-8 和 ASCII 重叠的地方,那么它应该可以安全使用。
安全使用是指它不会将非空格的 Unicode 字符检测为空格。我知道它可能无法检测到特殊的 Unicode 空白,但这对我来说不是问题。
即我可以接受假阴性,只要没有阳性。假设是正确的吗?
【问题讨论】:
-
is space适用于任何固定宽度的单字节字符集,其中 ASCII 是最常见的,但绝不是唯一的例子。在使用非 ASCII 字符集的系统上,它会为该字符集而不是 ASCII 给出适当的答案。 -
@PeteBecker 有现代的非 ASCII 系统吗?我听说过 EBCDIC,但据我所知,这些都是从很久以前开始的,当时事情还没有标准化。
-
错误的问题。如果您基于全世界都是 ASCII 的观点做出设计和编码决策,那么您最好能够证明它是正确的。其他任何东西都不是工程。
-
@PeteBecker 好的,我会记住这一点。我需要的代码只能在 Linux 上运行(在 x86 PC 上),所以至少出于我的目的,我确信它会是 ASCII。
-
这是一个无意义的论点,UTF-8 只意味着一件事,它与任何传统的 8 位编码都有关系。它是一种 Unicode 编码,旨在消除歧义。如果您根本不关心排版的准确性,那么根本不要打扰并使用
== ' '。它永远不会匹配 utf-8 序列的一部分,第二个和后续字节的 MSB 打开。