这个问题与语言无关,但受到这些 c/c++ 问题的启发。
假设数字字符(0123456789)在所有文本编码中连续出现是否安全?
即可以安全地假设
'9'-'8' = 1
'9'-'7' = 2
...
'9'-'0' = 9
在所有编码中?
我期待这个问题的明确答案:)
谢谢,
更新:好的,让我将所有编码限制为像 ASCII 和/或 EBCDIC 以及之后的任何东西。Sandscrit 我不那么担心。. .
这个问题与语言无关,但受到这些 c/c++ 问题的启发。
假设数字字符(0123456789)在所有文本编码中连续出现是否安全?
即可以安全地假设
'9'-'8' = 1
'9'-'7' = 2
...
'9'-'0' = 9
在所有编码中?
我期待这个问题的明确答案:)
谢谢,
更新:好的,让我将所有编码限制为像 ASCII 和/或 EBCDIC 以及之后的任何东西。Sandscrit 我不那么担心。. .
我不知道所有的编码,但至少在 ASCII 和 <shudder> EBCDIC 中,数字 0-9 都是连续出现的,并且以递增的数字顺序出现。这意味着所有基于 ASCII 和 EBCDIC 的编码也应该按顺序排列其数字。所以对于你会遇到的几乎任何事情,除非莫尔斯电码或更糟,我会说是的。
你会发现很难证明是否定的。没有人可能知道曾经发明的每一种文本编码。
今天常用的所有编码(除了 EBCDIC,它仍然常用吗?)都是 ASCII 的超集。我会说你更有可能赢得彩票,而不是找到一个不存在严格排序的“0”到“9”的实际环境。
对于 C++ 和 C 程序文本,C++ 标准和 C 标准都要求这样做。
根据 K&R ANSI C,它是。
摘抄:
...“这个特定的程序依赖于数字的字符表示的属性。例如,测试
if (c >= '0' && c <= '9') ...
判断字符是否
c
为数字。如果是,则该数字的数值为
c - '0'
这仅在
'0', '1', ..., '9'
具有连续增加的值时才有效。幸运的是,这适用于所有字符集。……”
我所知道的所有文本编码通常按顺序对数字的每个表示进行排序。但是,当您在其他编码中包含所有其他数字表示时,您的问题会变得更加广泛,例如日语:1234567890。注意数字的字符有何不同?好吧,它们实际上是不同的代码点。所以,我真的认为你的问题的答案可能很难,因为那里有很多编码,而且它们中有多种数字表示。
一个更好的问题是问自己,为什么我首先需要指望数字在顺序代码点中?