【发布时间】:2015-09-27 21:31:53
【问题描述】:
我在维基百科上搜索了很多页面,官方 GS1 规范,但尚未找到问题的明确答案
GS1 FNC1 字符的实际十六进制/二进制值是多少?
关于如何使用 GS1 标识符、如何使用 ZPL 打印条形码以及如何编码 FNC1 有很多信息,但我想知道该字符的实际 HEX 值。
【问题讨论】:
我在维基百科上搜索了很多页面,官方 GS1 规范,但尚未找到问题的明确答案
GS1 FNC1 字符的实际十六进制/二进制值是多少?
关于如何使用 GS1 标识符、如何使用 ZPL 打印条形码以及如何编码 FNC1 有很多信息,但我想知道该字符的实际 HEX 值。
【问题讨论】:
FNC1 到 FNC4 等特殊功能字符属于“非数据字符”类别,可以在各种条码符号体系中进行编码,但在解码的数据流中没有任何直接的 ASCII 表示。支持此类字符的每种符号系统都有不同的方案,用于在其内部表示中对它们进行编码,这与任何面向字节的字符数据截然不同。
FNC 字符既可用作标志字符(表示对读者而言特殊的东西),也可用作格式化字符(修改编码数据的含义)。因此,它们不打算在主机系统从基本条码阅读器接收到的数据中直接传输。
每个 FNC 字符的通常用途如下:
请注意,它们可能并非都在某些条码符号体系中可用,甚至可能以不同的、非典型或重载的方式指定。
在符号的内部数据中编码 FNC 字符是通过特定于编码软件的“转义机制”完成的。例如,要将 FNC1 用于数据“(01)00312345678906(21)123456789012(30)0144”的典型 GS1 结构化数据角色中,您可能会看到 FNC1 字符转义为 {FNC1},因此输入看起来像 {FNC1}010031234567890621123456789012{FNC1}300144 .但是每个库接受这些非数据字符的方式不同,有些甚至会自动插入所需的字符。
扫描条形码时,符号的内部数据通常会被解码,然后通过基本通道(例如键盘楔形)作为要根据拉丁 1 字符编码解释的字节序列传输到主机。 FNC 字符不能以这种方式表示并从数据流中排除,但它们对数据的格式化效果仍然存在。
例如,大多数符号体系的标准规定,当 FNC1 字符用作符合 GS1 应用标识符标准格式的数据中的字段分隔符时,它应该被解码并作为 GS (ASCII 29) 传输。明确指出,作为 GS1 应用程序标识符分隔符的 FNC1 字符的格式化效果是在可变长度字段的末尾放置一个 GS 字符。但在其他角色中(例如当 FNC1 用于“第一/第二位置”作为标志字符并且使用非 GS1 格式化数据时)没有格式化效果携带的数据,因此在解码过程中没有 ASCII 表示。
对数据有格式化影响的特殊功能字符的另一个实例是使用 FNC4 将其范围从 7 位 ASCII 扩展到扩展 ASCII 的符号,如 this answer 中所述。
一个微妙的技术点是,传输到主机的数据通常带有一个称为“符号系统标识符”的短符号指示标头作为前缀,它表示从中读取数据的符号的类型和用法。这通常通过符号数据中存在其他不可见的标志字符来修改,例如,以“FNC1 in first”表示存在 GS1 格式数据,或者当 FNC3 出现在符号中的任何位置时表示阅读器编程模式。详细信息是特定于符号的。
【讨论】:
重要的是要知道(并正确设置扫描仪)根据 ISO/IEC 15424 将第一个位置的 FNC1 字符转换为符号系统标识符。符号系统标识符的修饰符 m 显示是否存在 FNC1 .如果不这样做,应用程序将无法再看到是否打算使用 GS1 结构。其他结构由例如标识。数据矩阵码(ISO/IEC 16022、ISO/IEC 15434)中的宏 06。它需要弄清楚我们的差异以采取正确的行动来处理数据。
【讨论】: