二维码是容器,不是链接
摄像头读到的方块只是字节。让手机提出加入网络而不是显示一句话的,是这些字节的形状:网络的 `WIFI:T:WPA;S:the network;P:the password;;`、邮件的 `mailto:`、号码的 `tel:`、短信的 `SMSTO:`,以及联系人的 version 3.0 vCard。每种格式都有自己的转义规则,也都有自己的失败方式,而且看起来和成功一模一样:码能扫,什么也没打开,错误却看不见。
所以这里的每种载荷的拼装规则都带独立检查。包含分号的 Wi-Fi 密码会被转义,因为有效载荷是分号分隔的列表;姓氏里的逗号会在 vCard 中转义,否则它会开始一个新的姓名字段;手机可能截断的长地址会按 75 个八位组折行并标出续行,这是 vCard 规范的要求。结果面板会打印进入码里的精确有效载荷,因此可以逐字符检查,而不是只能相信。
码的种类也决定扫描器能拿它做什么,仅此而已。二维码不能自己加入网络、发送消息或保存联系人:它填好一张表单,等待人按下按钮。把 Wi-Fi 码贴到墙上之前值得知道这一点,因为密码就在码里。