我在维基百科上搜索了很多关于GS1官方规范的页面,但是还没有找到这个问题的明确答案
GS1 FNC1字符的实际HEX/二进制值是什么?
有很多关于如何使用GS1标识符,如何用ZPL打印条形码以及如何编码FNC1的信息,但我想知道该字符的实际HEX值。
特殊功能字符,如FNC1到FNC4,属于"非数据字符"类。可以在各种条形码符号中编码,但在解码的数据流中没有任何直接的ASCII表示。每个支持这种字符的符号系统都有一个不同的内部编码模式,这与任何面向字节的字符数据都是截然不同的。
FNC字符既可以作为标志字符(表示对阅读器的特殊内容),也可以作为格式化字符(修改编码数据的含义)。因此,它们不打算在主机系统从基本条码读取器接收到的数据中直接传输,尽管在这两种情况下它们可能具有"效果"。
每个FNC字符的通常用途如下:
- FNC1 -结构化数据标志字符指示GS1和AIM格式和组分隔符格式字符,以及其他用途。
- FNC2 - Message附加标志字符用于缓冲单次读取的数据。
- FNC3 - Reader Programming 标志字符用于设备配置。
- FNC4 -扩展ASCII 格式化字符用于编码序数128-255的字符。
请注意,它们在某些条形码符号中可能不是全部可用,甚至可能以不同的、非典型的或重载的方式指定。
在符号的内部数据中编码FNC字符是通过"转义机制"完成的。这是特定于编码软件的。每个库都有不同的方式在其输入中接受这些非数据字符。例如,要使用FNC1在其典型的GS1结构化数据角色中对数据"(01)00312345678906(21)123456789012(30)0144";您可能会看到FNC1字符转义为{FNC1}
,因此输入看起来像{FNC1}010031234567890621123456789012{FNC1}300144
。
一些库甚至会使用一组常规或扩展的ASCII字符作为FNC字符的占位符,但这些是任意表示,将它们视为这些非数据字符的实际ASCII值是错误的。
在扫描条形码时,符号的内部数据通常被解码,然后通过基本通道(例如键盘楔)作为根据拉丁1字符编码解释的字节序列传输到主机。FNC字符不能以这种方式表示,并被排除在数据流之外,但是它们对数据的格式化效果仍然存在。
例如,大多数符号的标准规定,当FNC1字符在符合GS1应用标识符标准格式的数据中用作字段分隔符时,应该将其解码并传输为GS (ASCII 29)。明确地说,作为GS1应用程序标识符分隔符的FNC1字符的格式化效果是在可变长度字段的末尾放置一个GS字符。但在其他角色中(例如FNC1用于"第一/第二位置"时);作为标志字符和非gs1格式的数据),对携带的数据没有格式化效果,因此在解码期间没有ASCII表示。
对数据具有格式化效果的特殊功能字符的另一个实例是使用FNC4将其范围从7位ASCII扩展到扩展ASCII的符号,如本答案所述。
一个微妙的技术要点是,传输到主机的数据通常带有一个简短的符号指示头,称为"符号标识符"。表示从其中读取数据的符号的类型和用法。这通常通过在符号数据中出现不可见的标志字符来修改,例如,在first"中使用"FNC1来指示GS1格式数据的存在。或当FNC3出现在符号中的任何位置时,指示阅读器编程模式。细节是符号特定的。
旁白:除了FNC非数据字符外,还有其他非数据字符通常被条形码符号支持,这些字符没有直接的ASCII表示,但会影响整个消息。这些包括宏字符(将消息数据包装在数据字符"信封"中)和ECI指示符,这些指示符要求使用超出典型"基本通道"的传输协议。
重要的是要知道(并正确设置扫描器),第一个位置的FNC1字符根据ISO/IEC 15424被翻译为符号标识符。符号标识符的修饰符m显示是否存在FNC1。如果没有这样做,应用程序将无法再看到是否打算使用GS1结构。其他结构由数据矩阵代码(ISO/IEC 16022, ISO/IEC 15434)中的宏06来标识。需要找出差异,以便采取正确的行动来处理数据。