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