我注意到我生成的XHTML5编号的章节标题有一个Â;介于数字和标题字符串之间。我以为这是一个世代错误。但不是,我的DocBook发行版的gentext文件common/en.xml实际上指定了这一点。
common/en.xml的第338行:
<l:template name="section" text="%n. %t"/>
当在十六进制编辑器中查看时,n后面的点和空格是ASCII字符代码C2和A0,它们是Â;和NBSP字符。我能理解NBSP。但为什么要Â;?
我知道我可以在我的自定义层中更改这一点。但违约似乎很奇怪。
我使用的是docbook-xsl-ns-1.77.1。
这是因为编码是UTF-8,这是目前文本的常规Unicode编码。在UTF-8中,0x7F以上的任何字符都由2、3或4个字节的序列表示,具体取决于它包含的有效代码位的数量。
0xC2是启动2字节序列的字符之一。在二进制中,它是1100 0010。两个1位表示一个2字符序列,最下面的五位是编码字符的前五位。第二个0xA0是1001 0000。单个前导1位(后面跟着0位)表示序列的延续,底部6位是编码字符的底部位。
将第一个字节的底部五位与第二个字节的顶部六位放在一起,我们得到了000 1001 0000,十六进制U+A0,这确实是非中断空间。