Qraft

编码模式

编码模式是 QR 码将数据转换为模块图案时使用的编码方式。共有 4 种:数字模式 (仅 0-9)、字母数字模式 (0-9、A-Z 及部分符号)、字节模式 (任意二进制数据) 和汉字模式 (Shift JIS 汉字)。

数字模式每个字符消耗的比特数最少,在相同 QR 码尺寸下可以存储更多数据。QR 码生成工具通常会根据输入数据自动选择最高效的模式。字母数字模式只能处理 0-9、大写 A-Z、空格以及 $ % * + - . / : 共 45 个字符,因此含有小写字母的一般 URL 会以字节模式编码。字母数字模式每个字符占 5.5 比特,而字节模式占 8 比特,所以把整条 URL 转为大写、让每个字符都落在这 45 个之内时,同样的内容可以装进更小的符号。只把域名改成大写并没有用:只要 https:// 这样的小写方案名还在,数据仍然会按字节模式编码。

模式的选择直接影响数据量与 QR 码的尺寸。把只有数字的数据特意用字母数字模式存储时,数据本体所占的比特数约为数字模式的 1.7 倍 (11 位电话号码为 37 比特对 61 比特)。反过来,像产品代码或序列号那样只用大写字母和数字设计的字符串可以落在字母数字模式之内,但只要混入一个小写字母或下划线,就会退回字节模式。汉字模式把 Shift JIS 的双字节字符用每字 13 比特表示,因此同样的日文比保持 UTF-8 用字节模式存储 (每字 3 字节 = 24 比特) 更省数据量,不过含有 Shift JIS 中没有的字符时就无法使用。手动指定模式时,请先确认要存储的字符是否落在该模式的字符集合之内。

数据使用哪种模式编码,由置于数据流开头的 4 位模式指示符 (Mode Indicator) 来区分。数字模式为 0001,字母数字模式为 0010,字节模式为 0100,汉字模式为 1000。读取端通过查看这 4 位来判断后续数据的解读方式。