专栏首页用户6811391的专栏QR 编码模式分析(一)

QR 编码模式分析(一)

一个 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 编码,也是要结合用户需求来考虑做决定。

本文分享自微信公众号 - TTTEED(TEDxPY),作者:TED

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 初识 QR 二维码(零)

    提到二维码,想必大家每天都会接触到,扫码支付、扫码添加微信好友等都会用到。关于二维码的生成原理,网上确实有些介绍,但基本涉及到具体编码就一笔带过没有深入了。目前...

    TTTEED
  • QR 数据编码详解(二)

    每种编码模式针对其字符,不断优化以产生最短的编码二进制串。在此过程中它们采用的编码方法是不同的,本篇将主要解释数据编码过程。

    TTTEED
  • 一键复制时间提醒

    这两天写了个超级简单的微信小程序,展示时间提醒,同时支持将提醒信息一键复制到剪贴板:

    TTTEED
  • Python学习(3):理解计算机中编码三、认识常见的计算机编码

    梧雨北辰
  • base16,base32,base64 编码方式的通俗讲解

    base16,base32,base64 都是编码方式,对应有各自的一套编码算法。

    林冠宏-指尖下的幽灵
  • 从哈夫曼编码再出发:原理和现实

    对于计算机科班出身的人来说,在大学阶段几乎都学过信息论和算法这两门课,信息论都会讲到香农三大定理以及哈夫曼编码,算法课上会学习二叉树,甚至哈弗曼树。在介绍哈夫曼...

    职场亮哥
  • NAB 2019见闻:CAE视频编码与QoE

    https://www.streamingmedia.com/Articles/ReadArticle.aspx?ArticleID=131182

    LiveVideoStack
  • 《5》python字符串和编码

    「5」python字符串和编码 ? 字符编码 最早只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大...

    企鹅号小编
  • ERP系统物料编码十大原则

    物料编码对于制造类企业供应链管理作用不可说不巨大,影响不可谓不深远,甚至是任何一个ERP系统优化不得考虑的关键环节!然而,影响编码原则的因素有很多,但归根结底就...

    SAP斯凯普斯 Qasim

扫码关注云+社区

领取腾讯云代金券