html显示十进制字符,非法HTML字符:十进制141
我们正在Mac OS X 10.11上使用Saxon PE 9.5.1.8处理UTF-8 XML输入文件。这是变换:
这是我们的XML输入文件的hexdump:
$ hexdump -C utf.xml
00000000 3c 3f 78 6d 6c 20 76 65 72 73 69 6f 6e 3d 22 31 |<?xml version="1|
00000010 2e 30 22 20 65 6e 63 6f 64 69 6e 67 3d 22 55 54 |.0" encoding="UT|
00000020 46 2d 38 22 3f 3e 0a 3c 72 6f 6f 74 3e 0a 3c 61 |F-8"?>..
00000030 3e 30 78 43 32 42 35 3d 22 3c 21 5b 43 44 41 54 |>0xC2B5="
00000040 41 5b c2 b5 5d 5d 3e 22 3c 2f 61 3e 0a 3c 61 3e |A[..]]>"
. |00000050 30 78 43 32 38 44 3d 22 3c 21 5b 43 44 41 54 41 |0xC28D="
00000060 5b c2 8d 5d 5d 3e 22 3c 2f 61 3e 0a 3c 2f 72 6f |[..]]>".
00000070 6f 74 3e 0a |ot>.|
00000074
重要字符是(i)00000040行,0xC2B5表示为.中的两个[..]字符,(ii)行00000060,0xC28D表示为两个.字符[..]。
以下是如何从* nix命令shell生成XML输入文件:
echo '<?xml version="1.0" encoding="UTF-8"?>'
echo ''
echo -e '0xC2B5=""' # micro sign
echo -e '0xC28D=""' # control character
echo ''
我们的转换终止于:
SERE0014: Illegal HTML character: decimal 141"
十进制141是0x8D,这是我们的控制字符0xC28D的第二个字节。为什么Saxon正在挑选0x8D字符并将其视为无效?我们期望Saxon将其视为有效的2字节UTF-8字符0xC28D的字节#2。
我们知道当我们可以使用method="xml"创建HTML时;但是,这样做(i)不会发出我们承诺产生的HTML5,以及(ii)从HTML输出中删除0xC2字节。