@是什么类型符号?

179 阅读2分钟

背景

在源码注释中看到“@”符号,根据后面接着一个注解名,猜测这可能是@符号。

To override this behavior for a single method just place a @PrepareForTest 
annotation on the specific test method.

回想起之前使用标签语言Html, Xml,为了避免与标签语言保留的符号冲突使用类似的符号,例如:大于> ,小于<。却从未见过在&;之间以#开头的数字格式符号。

探索

&gt;&lt;这种以&开头,以;结尾的符号类型是Html标签中的符号实体。Html标签会有一些预留字符,其中就包含最典型的<,>,例如<html>。而在Html中又需要表示大于、小于这种含义,Html作者就设计了&XXX;符号表示预留字符的特殊含义。Html标签中常用的符号实体如下:

image.png(图一)

细心的读者会发现上述表格最右侧实体编号一栏的数据,竟与“@”符号格式一致。可以确认“@”就是所谓的实体编号。但是其中并没有“@”字眼。扩大搜索的范围,发现&;之间以#之后的数字可能是字符集中的编码。下述是ASCII部分编码,

image.png

image.png (图二)

表格中<的十进制60,>的十进制62都与图一中<>的实体编码一致。图二中@的十进制64与“@”符号中数值大小是相同的(右侧的0对数值没有意义)。几乎可以确定,Html之类的标记语言使用标准字符集中字符编码,以&开头,以;结尾,并以#作为前缀作为实体编号

为了确保推测的正确性,使用在线HTML解析器执行&#64;,验证是否与&#064;的效果一致。

效果如下。结果印证了我的推测。

image.png

<>可以使用&gt;&lt;表示,为什么不使用类似的实体名称表示@ ,显然实体名称更易于记忆和使用。经过一番资料搜索发现,大多数字符在Html等标记语言中是没有实体名称的,具体看下图(部分ASCII码)。

image.png image.png (图三)

原因有二:

  • 只有少数字符才会与Html等标记语言预留字符冲突。
  • 大不多字符的使用频率并不高,达不到设置实体名称的份量。

结论

&#XXX;格式的符号是Html等标记语言为了避免与语言本身预留字段冲突而设计的实体编号格式。其中XXX是标准字符集中十进制编号,例如,<是60,>是62。因为ddd是数值,左侧补0与不补效果一样,比如&#060;&#60;相等。