【问题标题】:Encoding binary barcode in Passbook在 Passbook 中编码二进制条码
【发布时间】:2013-11-13 13:11:08
【问题描述】:

我必须将 Passbook 与一个网站集成,该网站提供 PDF417 条形码和以二进制(而不是文本)编码的数据,例如:

我有什么办法可以在 pass.json 中编码这个二进制块,以便 Passbook 在 iPhone 上以与原始图片相同的方式显示它?

再次,我无法切换到基于文本的条形码,因为我不拥有数据。为澄清起见,所附图片包含一个 PDF417 条形码,解码后包含不可打印的字符,例如 NULL 字符,这就是我将其称为 binary 的原因。

更新

这是图像解码成字节数组的方式:

01 00 01 00 02 00 E7 C4 B5 96 B8 42 94 B3 B4 75 
1A D1 F2 38 92 EA B5 0E 17 5D 0B 2A AA 64 18 CC 
28 62 86 E5 74 5D A3 89 09 12 6E D5 7A 1A C9 EE 
BF 23 9C E1 60 AD 9E DE 92 6D E5 79 99 C7 91 F1 
6A D5 82 2E B6 E3 81 24 F8 0A F8 E6 44 5D 56 D2 
00 00 00 00 00 00 40 0D 00 09 20 23 00 96 13 5C 
10 EC 0C EA A3 E8 A3 20 30 4B 2A 20 7D 0F BB DF 
F7 5E FA 1E 76 F7 40 20 10 08 04 02 81 40 20 30 
A3 D5 6C 1A 04 76 14 10

这就是我尝试将其转换为 utf-8 字符串的方式:

{"message": "\u0001\u0000\u0001\u0000\u0002\u0000\u00E7\u00C4\u00B5\u0096\u00B8\u0042\u0094\u00B3\u00B4\u0075\u001A\u00D1\u00F2\u0038\u0092\u00EA\u00B5\u000E\u0017\u005D\u000B\u002A\u00AA\u0064\u0018\u00CC\u0028\u0062\u0086\u00E5\u0074\u005D\u00A3\u0089\u0009\u0012\u006E\u00D5\u007A\u001A\u00C9\u00EE\u00BF\u0023\u009C\u00E1\u0060\u00AD\u009E\u00DE\u0092\u006D\u00E5\u0079\u0099\u00C7\u0091\u00F1\u006A\u00D5\u0082\u002E\u00B6\u00E3\u0081\u0024\u00F8\u000A\u00F8\u00E6\u0044\u005D\u0056\u00D2\u0000\u0000\u0000\u0000\u0000\u0000\u0040\u000D\u0000\u0009\u0020\u0023\u0000\u0096\u0013\u005C\u0010\u00EC\u000C\u00EA\u00A3\u00E8\u00A3\u0020\u0030\u004B\u002A\u0020\u007D\u000F\u00BB\u00DF\u00F7\u005E\u00FA\u001E\u0076\u00F7\u0040\u0020\u0010\u0008\u0004\u0002\u0081\u0040\u0020\u0030\u00A3\u00D5\u006C\u001A\u0004\u0076\u0014\u0010";}

但是,Passbook 不显示等效的条形码。事实上,它只显示几个前字节。

【问题讨论】:

  • 即使您不拥有数据,也许您可​​以访问二进制编码格式?您应该能够解码数据并将其作为文本传递给 PassBook。
  • @Johan Karlsson:我可以破译通行证。结果,我得到了一个开头包含零的二进制字节数组。问题是,我不知道如何将这个字节数组传递给 pass.json.
  • @PassKit:假设所附图片上的条形码解密为:0x00、0x01、0x00、0x02(这些是示例四个字节)。我将如何填充需要字符串的 JSON 字段:{"message": "WHAT GOES HERE?" }
  • 这将取决于编码 - 您只需将字节流编码为您选择的编码。您目前如何生成和签署通行证?也许我可以提供一些代码来演示。
  • 有人删除了我的答案,所以……我猜他们不认为这是一个答案?您是在实际的 iPhone 上尝试过,还是将其放入 sim 卡中?您的转义字符串在实际 iPhone 上为我显示正确的条形码,并在 Mac 上被截断。这是一个错误,但应该不重要。

标签: ios iphone passbook


【解决方案1】:

我认为您不想解码图像的二进制数据,而是想像扫描条形码一样从条形码中读取数据。

您可以使用http://zxing.org/w/decode.jspx 之类的服务,它为您提供条形码的价值,就像它正在被扫描一样。

将“原始文本”值发送到 pass.json。

我没有使用过这项服务,但在快速阅读之后,我假设它在下面的“消息”中:

"barcode" : {
    "message" : "ABCD 123 EFGH 456 IJKL 789 MNOP",
    "format" : "PKBarcodeFormatPDF417",
    "messageEncoding" : "iso-8859-1"
}

参考:https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/PassKit_PG/Chapters/Creating.html#//apple_ref/doc/uid/TP40012195-CH4-SW1

【讨论】:

  • 正确,但是,附加的图像不会解码为人类可读的字符串。相反,它看起来更像是一个带有 NULL 字符和其他特殊字符的二进制块。这些字节不能很好地粘贴到 "message" 字段的值中。
  • PDF417 使用基本的 929 编码。尝试将返回的数据从 base 929 转换为 64 或与消息格式相关的其他内容。参考:en.wikipedia.org/wiki/PDF417
猜你喜欢
  • 2020-02-22
  • 1970-01-01
  • 2011-05-08
  • 2012-03-19
  • 1970-01-01
  • 2014-08-09
  • 1970-01-01
  • 2011-08-31
  • 2022-01-11
相关资源
最近更新 更多