前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >QR 编码模式分析(一)

QR 编码模式分析(一)

作者头像
TTTEED
发布2020-07-08 20:03:49
1.6K0
发布2020-07-08 20:03:49
举报

一个 QR 二维码其实是一串文本信息的编码。QR 二维码的标准支持以下四种编码模式:数字编码、字符编码、字节编码和日文编码。每种模式都将文本编码为一串由 0 和 1 组成的二进制位,但其采用的编码转换方法不同。每种编码模式都针对其目标文本格式,不断优化编码方法以获取最短的结果二进制位串。本篇主要介绍如何选取最合适的编码模式。

QR 二维码模式

首先四种编码模式分别对应以下字符:

数字编码 对应十进制数字 0-9;

字符编码 包含十进制数字 0-9 和大写字母(不是小写哈),以及 $ % * + - . / : 还有空格等字符。字符编码支持的所有字符会映射成下方的索引表(Char. 列为字符,Value 列为其索引值,值为36的 SP 指空格字符):

字节编码 默认是对应 ISO-8859-1 字符集,如果用到 UTF-8 编码有些 QR 读码器也会自动检测读取。

日文编码 对应的是由 Shift JIS 字符集(日文编码字符集)而来的双字节编码。尽管 UTF-8 也可以编码日文字符,但要占用四个字节中的三个。Shift JIS 只需两个字节就可完成对日文字符编码,因此日文模式对压缩日文字符更高效。如果整个输入的字符串都是 Shift JIS 范围内的双字节编码,请采用日文模式。当然我们也可以在同一个 QR 二维码内采用不同的编码模式,后续我们会讲到。

此外,还有 ECI 编码(Extended Channel Interpretation) 主要用于特殊的字符集(例如 UTF-8 ),然而有些 QR 读码器并不支持该模式,无法读取 QR 二维码在该模式下的编码内容。

Structured Append mode 编码 属于混合编码,对多种 QR 二维码间的数据进行编码,最多可达 16 个 QR 二维码。本教程里不对此模式展开,但之后会添加更多相关信息。

FNC1 编码 使得 QR 二维码可以像 GS1 条形码一样使用,同样地具体我们不展开只在后续添加相关信息。

日文编码说明

有些 QR 读码器可以识别 UTF-8 编码的 QR 二维码。又因为所有 Shift JIS 字符在 UTF-8 编码中都有表示符,所有使用字节码模式也可以识别 UTF-8 编码的日文。

但是呢,日文在 UTF-8 编码中要用三个字节(极少情况下是四个字节),相比而下 Shift JIS 字符只要两个甚至一个字节来编码。换言之,如果使用 UTF-8 编码模式处理那么 QR 二维码可能无法对应大量的日文字符。使用Shift JIS 日文模式可以提供更高的容量。

因此,究竟是否选择日文编码,取决于用户需求。

UTF-8 编码说明

有些 QR 读码器可以自动识别 UTF-8 编码的字节码模式,但是其他读码器可能会解析出错误的字符。为了解决这问题,可以使用 ECI 模式,该模式下可以明确指出一套不同于 ISO-8859-1 的字符集。但是不幸的是也并不是所有读码器都支持 ECI 编码。

另一种选项是将 UTF-8 位元组顺序记号(BOM)置于输入文本之前。读码器将读取该记号以知道接下来文本是 UTF-8 编码。并不是所有 QR 读码器可以正确解析。UTF-8 的位元组顺序记号由三个十六进制数字组成:0xEF 0xBB 0xBF 。

如何选择最有效的编码模式

为了选择最有效的 QR 编码模式,按照以下情况来对输入文本进行检测:

  1. 如果输入字符串只包含十进制数字( 0 到 9 ),使用数字编码
  2. 如果数字编码不适用,而且如果所有字符都可以在上文字符表中找到,请选择字符编码。要注意的是,该编码模式不支持小写字母,只支持大写字母。
  3. 如果输入字符串中有字符不在上述表中,但在 ISO 8859-1 中可以编码,使用字节编码。之前也提到,QR 读码器在字节码模式下可以识别 UTF-8 编码。
  4. 如果所有字符在 Shift JIS 字符集,使用日文编码。Shift JIS 字符也可以被 UTF-8 编码,所以使用字节编码也没问题,但日文编码效率会更高。

混合编码及优化

在一个单独的 QR 码中,通过在每种模式的字节码前添加模式指示符。QR 规范阐述了如何最好地切换不同模式。在本教程中将不做讨论,但可能之后会增加更多相关信息。本教程只指导非混合模式的 QR 二维码。

结论

通过检测输入文本中的字符,多数情况下我们会选出最合适的 QR 编码模式。当选择编码模式时也要充分考虑 QR 读码器的局限性,也要注意并不是所有的 QR 读码器都遵守标准。此外,当你编码日文时,选择用日文编码还是 UTF-8 编码,也是要结合用户需求来考虑做决定。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 TTTEED 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档