二维码对文本字符串进行编码。二维码标准有四种文本编码模式:数字、字符、字节和日文汉字。每种模式都将文本编码为一串位(bits,1 和 0),但每种模式都使用不同的方法将文本转换为位。每种方法都经过优化,可为该数据类型生成尽可能短的位字符串。本页介绍如何确定要使用的模式。
二维码模式
四种编码模式包括以下字符:
数字模式适用于十进制数字 0 到 9。
字符模式适用于十进制数字 0 到 9,以及大写字母(不是小写),符号 $、%、*、+、-, ., / 和 : 以及空格。字符模式支持的所有字符都列在此字符值表的左列中。
字符值表默认情况下,字节模式适用于 ISO-8859-1 字符集中的字符。但是,某些二维码扫描仪可以自动检测是否在字节模式下使用 UTF-8。
日文汉字模式适用于 Shift JIS 字符集中的双字节字符。虽然 UTF-8 可以对汉字字符进行编码,但它必须使用三个或四个字节才能执行此操作。另一方面,Shift JIS 仅使用两个字节对每个汉字字符进行编码,因此日文汉字模式可以更有效地压缩汉字字符。如果整个输入字符串由 Shift JIS 双字节范围内的字符组成,请使用汉字模式。也可以在同一二维码中使用多种模式,如本页后面所述。
扩展频道解释 (Extended Channel Interpretation,ECI) 模式直接指定字符集(例如 UTF-8)。但是,某些二维码扫描仪不支持 ECI 模式,会导致其无法解析使用这种模式的二维码。
结构化追加模式跨多个 QR 码对数据进行编码,最多 16 个 QR 码。我不会在本教程中讨论此模式,但可能会在以后添加更多信息。
FNC1 模式允许 QR 码充当 GS1 条形码。我不会在本教程中讨论此模式,但可能会在以后添加更多信息。
关于日文汉字模式的说明
一些二维码扫描仪可以识别何时在字节模式下使用 UTF-8。由于所有 Shift JIS 字符都具有 UTF-8 表示形式,因此可以使用 UTF-8 编码的汉字字节模式。
但是,UTF-8 中的汉字用三个字节(在极少数情况下为四个字节)编码,而 Shift JIS 字符用两个或一个字节编码。换句话说,如果对汉字使用字节模式下的 UTF-8,则不可能在二维码中容纳尽可能多的字符。使用汉字模式进行移位JIS汉字可提供最高容量。
因此,是否对汉字使用汉字模式取决于您的需求。
关于 UTF-8 的说明
一些二维码扫描仪会自动检测 UTF-8 是否在字节模式下使用,但如果在字节模式下使用 UTF-8,则不这样做的阅读器可能会显示不正确的字符。要解决此问题,可以使用 ECI 模式,如上所述,可以在字节模式下指定与默认 ISO-8859-1 字符集不同的字符集。不幸的是,并非所有二维码扫描仪都支持 ECI 模式。
另一种选择是将 UTF-8 字节顺序标记 (BOM) 放在输入文本之前。一些二维码扫描仪会读取字节顺序标记并理解文本以 UTF-8 编码。并非所有二维码扫描仪都能正确解释这一点。UTF-8 的字节顺序标记是一组三个数字,此处以十六进制显示:0xEF 0xBB 0xBF
如何选择最有效的模式
要为 QR 码选择最有效的模式,请检查输入字符串中的字符并检查以下条件。
- 如果输入字符串仅包含十进制数字(0 到 9),请使用数字模式。
- 如果数字模式不适用,并且输入字符串中的所有字符都可以在此字符值表的左列中找到,请使用字符模式。小写字母不能以字母数字模式编码,只有大写字母。
- 如果某个字符不在字符值表的左列中,但可以用 ISO 8859-1 编码,请使用字节模式。如上所述,二维码扫描仪可能能够在字节模式下识别 UTF-8。
- 如果所有字符都在 Shift JIS 字符集中,请使用汉字模式。Shift JIS 字符可以用 UTF-8 编码,因此可以对汉字使用字节模式,但通常使用 Shift JIS 并对汉字字符使用汉字模式更有效。
混合模式和优化
通过在使用该模式的每个字节部分之前包含模式指示器,可以在单个 QR 码中使用多种模式。二维码规范解释了如何以最佳方式切换模式。我不会在教程中讨论这个问题,但我可能会在以后添加更多信息。本教程将假设您不会在 QR 码中混合模式。
总结
通过检查输入文本中的字符,可以选择对该文本进行编码的最佳模式。选择模式时请务必考虑二维码阅读器的局限性,并注意并非所有二维码阅读器都遵守该标准。此外,在决定是否使用汉字模式或是否在字节模式下使用 UTF-8 时,请考虑用户的需求。
下一篇: 数据编码
选择编码模式后,下一步是对数据进行编码。