以下是关于 Data Matrix 编码中 raw 选项的详细技术解析:


1. raw 选项的核心作用

raw 选项允许用户绕过编码器的自动数据处理,直接输入预编码的 码字(Codeword)

  • 本质:将数据字段视为 已编码的码字序列,而非原始文本。

  • 适用场景:需要精确控制码字级别的编码逻辑(例如生成特殊符号、兼容旧系统、测试非标准码字组合)。


2. 语法规则

  • 输入格式:每个码字以 ^NNN 表示,其中 NNN1-255 的十进制整数。

  • 码字限制

    • 范围限制:码字必须为 1-255(0 是无效码字,255 是特殊填充码)。

    • 格式强制:必须严格使用 ^ 前缀 + 3 位十进制数(如 ^001 而非 ^1)。

示例输入

^001^012^255^128

对应码字序列:[1, 12, 255, 128]


3. 关键特性

特性说明
绕过编码算法不执行 C40/Text/ASCII 等模式压缩,直接使用用户提供的码字序列。
强制码字校验输入的码字必须符合 Data Matrix 的码字规范(如 ECC 200 标准的码字表)。
支持功能字符允许直接插入 ^FNC1^ECI 等功能符的码字(需符合其码字位置规则)。
无数据压缩数据容量固定为码字数量,无法通过压缩算法优化容量。

4. 使用注意事项

  1. 码字有效性

    • 必须确保所有码字在 1-254 范围内(^255 仅用于填充,需由编码器自动处理)。

    • 无效码字(如 ^256^000)会导致编码失败。

  2. 结构化数据限制

    • 不支持 ISO/IEC 15434 结构化数据(如宏 05/06),需手动构造宏代码字。

  3. ECI 处理

    • 若需切换字符集,必须显式插入 ^ECIXXXXXX 的码字(如 ^927 表示 ECI 927)。

  4. 尺寸匹配

    • 需手动确保码字数量与符号版本(如 24x24)的容量匹配,否则可能截断或报错。


5. 典型应用场景

场景操作示例
测试非标准符号生成包含保留码字(如 ^999 错误码字)的符号以验证扫描器容错性。
兼容旧系统手动构造与旧版编码器完全一致的码字序列(如特定厂商的私有码字格式)。
二进制数据嵌入直接映射二进制流为码字(如 ^001^002^003 表示十六进制 0x01 0x02 0x03)。
调试编码逻辑绕过自动编码算法,直接验证符号生成阶段的码字排列。

6. 与自动编码的对比

特性自动编码模式raw 模式
输入类型原始文本/二进制数据预编码的 ^NNN 码字序列
码字生成编码器自动选择最优模式用户完全控制码字
数据容量自动压缩优化固定为输入码字数量
错误处理自动校验和填充需用户自行保证码字有效性
适用场景常规数据编码底层调试、私有协议、兼容性需求

7. 操作示例

目标:生成包含 "AB" 和 FNC1 的 Data Matrix,手动构造码字序列。

  1. 标准编码结果(自动模式):

    • 文本 "AB" + FNC1 的码字序列为 [66, 130, 232](ASCII 'A'=66, 'B'=130, FNC1=232)。

  2. raw 模式输入

    ^066^130^232
    • 编码器直接使用码字 [66, 130, 232] 生成符号,与自动模式结果一致。


8. 故障排查

  • 错误类型Invalid codeword ^256
    原因:码字超出 255 限制。
    解决:检查输入值是否在 1-255 范围内。

  • 错误类型Codeword count exceeds symbol capacity
    原因:码字数量超过指定版本(如 10x10 最大容量为 6 码字)。
    解决:减少码字数量或选择更大的符号版本(如 12x12)。


9. 总结

raw 选项是 Data Matrix 编码的底层控制接口,适用于需要直接操作码字的场景。它牺牲了易用性和容量优化,换取对编码过程的完全控制,需谨慎使用以确保符合 Data Matrix 的码字规范。