四种主要模式
每种模式都在字符范围和密度之间取舍。数字模式只能处理数字,但每三个数字只占 10 位;字节模式能处理任何字节,但每个字节要用 8 位。
字母数字模式覆盖一个 45 个字符的集合:数字 0–9、大写字母 A–Z、空格,以及符号 $ % * + - . / 和冒号。小写字母不在其中,所以全大写的网址生成的二维码,可以比同一个小写网址更小。
- 数字:数字 0–9,每 3 个数字 10 位
- 字母数字:45 个字符,每 2 个字符 11 位
- 字节:任意 8 位数值,每字节 8 位
- 汉字:Shift JIS 双字节字符,每个 13 位
模式指示符与分段
每一段数据都以一个 4 位的模式指示符和字符计数开头,计数的长度取决于模式和版本。一个二维码可以包含多个这样的分段,例如长串数字用数字模式,其余用字节模式,这样得到的结果可能更小。
另外几个 4 位的指示符表示的是功能而不是字符集:ECI 用来声明字符编码,结构化追加用来把数据拆分到多个二维码中,FNC1 用于 GS1 和其他行业数据格式。以四个零位构成的终止符结束数据。
- 数字 0001,字母数字 0010,字节 0100,汉字 1000
- ECI 0111,结构化追加 0011
- FNC1 第一位置 0101,第二位置 1001
- 终止符 0000
字节模式与字符集
标准对字节模式的默认解释是 ISO-8859-1(Latin-1),但如今大多数生成器写入的是 UTF-8,这样带重音的字母、其他文字和表情符号才不会丢失。读取器通常通过检查字节来识别 UTF-8。
如果字符集必须明确无误,可以用 ECI 头部明确声明。没有它,读取器偶尔会猜错,显示出乱码。