简单直接的问题:我能否安全地假设UTF-8、UTF-16或UTF-32代码点(字符)的一个字节不会是ASCII空格字符(除非该代码点代表它)?
我来解释一下:
假设我有一个UTF-8编码的字符串。这个字符串包含一些需要多个字节才能存储的字符。我需要找出这个字符串中是否有任何ASCII空格字符(空格、水平制表符、垂直制表符、回车、换行等——Unicode定义了更多的空格字符,但暂且不管)。
所以我要做的就是遍历字符串,并检查任何一个字节是否与定义空格字符的字节相匹配。例如,以0D(十六进制)表示回车。请注意,我们在这里讨论的是字节,而不是字符。
这样做可以吗?会有UTF-8代码点的第一个字节是0D,第二个字节是其他东西,而这个代码点并不表示回车吗?反过来呢?会有第一个字节是奇怪的东西,第二个(或第三个、第四个)字节是0D,而这个代码点并不表示回车吗?
UTF-8与ASCII向后兼容,因此我真的希望它对UTF-8有效。从我所知道的来看,它可能有效,但我不太了解细节,无法确定。
至于UTF-16和UTF-32,我怀疑根本行不通,但我对这些细节知之甚少,因此请随意给我惊喜……
这个奇怪问题的原因是:我的代码检查ASCII空格是否有效,我需要知道它在Unicode上是否会出现问题。由于某些原因,我别无选择,只能逐字节进行检查。我希望与ASCII的向后兼容性可以至少为我提供UTF-8支持。