在 QR 码符号中存储 vCard 数据的最有效方法

Most efficient method to store vCard data within an QR Code symbol

使用JavaScript压缩QR码中的vCard数据的有效方法是什么?我尝试了 lz-string 库,但是当我尝试对具有非法 UTF-16 字符的 QR 码进行编码时出现错误。有没有更好的方法?

如果 vCard 打算在开放式应用程序中读取,例如使用通用 QR 码 readers,您不能简单地压缩输入数据并期望解码器弄清楚如何解压缩结果数据。

减小生成符号大小的一种方法是通过将自己限制为大写和数字来确保编码器充分利用 QR 码的数字和字母数字编码模式(而不是切换到低效的字节编码模式)如果可行的话,在基本格式符号旁边添加字符。然而,您将需要使用一个好的 QR 代码生成库来确定模式之间的最佳切换,以最小化内部数据长度,以便从该技术中受益。[*]

如果您还没有,您应该考虑将纠错级别降低到 "L"。

最后,考虑使用更紧凑的 meCard 格式而不是 vCard。

如果预期用途是在封闭的应用程序中(尽管我看不到 vCard 是这种情况),您可以使用 GZIP 压缩(RFC 1952)并通过在数据前加上 ECI 001800 指示符来表明这一点。在扫描时,您可以通过将支持 ECI 的 reader 置于扩展通道模式以检测 ECI 001800 指示器的存在并在您的应用程序中相应地解压缩来可靠地确定 GZIP 压缩的使用。

[*] Barcode Writer in Pure JavaScript 是一个 JavaScript 库,可对 QR 码的任何给定输入进行最佳编码,以提供尽可能小的符号。