标签设备

SATO SBPL QR 码多类型载荷处理方案

Admin2026年9月5日

方案说明

本方案覆盖英文、中文、二进制 / 十六进制三类 QR 业务载荷,包含 SBPL 两套 QR 指令ESC+BQ、ESC+2D30用法、限制、Python 示例、故障风险。具体应用场景可联系上海敏用索取解决方案。

ESC = 0x1B;标签包裹:ESC+A标签开始,ESC+Z标签结束;H/V 单位 dot。 重要:SBPL 无 ZPL 的^FH十六进制转义语法;载荷内部出现0x1B会破坏 SBPL 协议。

机型前置条件

指令 支持机型 备注
ESC+BQ CL4NX、GL4xxE老机型 载荷不能包含逗号`,`
ESC+2D30 CL4NX‑Plus、CL4‑SXR 载荷允许逗号,但禁止0x1B字节

中文内置 QR 方案仅适用于:CL4NX / CL4NX‑Plus / CL4‑SXR,打印机需设置GB18030字符集;GL4xxE 无简体中文字库,只能使用上位机位图方案。


1. 纯英文 ASCII 载荷(简单场景,推荐使用打印机内置 QR)

载荷内容:字母、数字、符号,无逗号、无 ESC、无二进制。

ESC+BQ 示例

ESC = b"\x1b"
# 纯英文载荷
qr_payload = b"SATO QR TEST 001,HELLO WORLD"

sbpl_cmd = (
ESC + b"A"
+ ESC + b"H0100" + ESC + b"V0100"
+ ESC + b"BQ2,04,0000,"
+ qr_payload
+ ESC + b"Q1"
+ ESC + b"Z"
)

⚠️注意:ESC+BQ载荷内不能有逗号,上面示例仅做演示,出现逗号会报 1017 错误。

ESC+2D30 示例(允许载荷内逗号)

ESC = b"\x1b"
qr_payload = b"SATO QR TEST 002,HELLO WORLD"

sbpl_cmd = (
ESC + b"A"
+ ESC + b"H0100" + ESC + b"V0100"
+ ESC + b"2D30,M,04,0,0"
+ qr_payload
+ ESC + b"Q1"
+ ESC + b"Z"
)


2. 中文载荷两种实现方案

方案 A:打印机内置 QR 指令(GB18030 字节透传)

风险:QR 存储 GB18030 字节,手机扫码默认 UTF‑8 解析会乱码;不支持0x1B。 打印机配置:

  • Kanji Set: GB18030
  • Character Code: GB18030

ESC = b"\x1b"
text = "测试中文标签123"
# 关键:编码为GB18030,不要使用utf‑8
qr_payload = text.encode("gb18030")

# ESC+2D30
sbpl_cmd = (
ESC + b"A"
+ ESC + b"H0100" + ESC + b"V0100"
+ ESC + b"2D30,M,04,0,0"
+ qr_payload
+ ESC + b"Q1"
+ ESC + b"Z"
)

方案 B:上位机生成 QR 位图 ESC+GM(推荐,标准 UTF‑8,无乱码)

上位机完成 QR 编码,打印机只打印图片,不受打印机固件、字符集限制,中文输出标准 UTF‑8。

代码逻辑简述:使用qrcode库生成 QR 图片,转为 SBPL 位图流下发。

import qrcode

text = "测试中文标签123"
qr = qrcode.QRCode()
qr.add_data(text)
img = qr.make_image("1")
# 将img转为SBPL ESC+GM位图字节流发送打印机


3. 二进制 / 十六进制载荷(含 0x00、0x01、0x1B 等原始字节)

❗禁止直接送入ESC+BQ / ESC+2D30内置 QR 指令:载荷中0x1B会打断 SBPL 数据流。

可选方案 1:业务层编码(业务可控)

将原始二进制做 Base64/Hex 转为可见 ASCII 字符串存入 QR,扫码后业务程序解码还原二进制。

import base64

ESC = b"\x1b"
raw_binary = bytes([0x00,0x01,0x02,0xAA,0xBB])
# 二进制转base64字符串
b64_str = base64.b64encode(raw_binary).decode("ascii")

sbpl_cmd = (
ESC + b"A"
+ ESC + b"H0100" + ESC + b"V0100"
+ ESC + b"2D30,M,04,0,0"
+ b64_str.encode("ascii")
+ ESC + b"Q1"
+ ESC + b"Z"
)

可选方案 2:上位机渲染位图(通用,推荐)

任意二进制、0x00、0x1B、中文混合场景,全部上位机完成 QR 编码,使用ESC+GM打印位图。

import qrcode

# 可混合中文+二进制
raw_data = "测试二进制".encode("utf‑8") + bytes([0x00,0x01,0x11])
qr = qrcode.QRCode()
qr.add_data(raw_data)
img = qr.make_image("1")
# 图片转为SBPL ESC+GM位图下发

4. 方案选型总表

载荷类型 内容特征 推荐方案 备注
纯英文ASCII 字母数字,无特殊控制字符 ESC+BQ / ESC+2D30 ESC+BQ规避逗号
中文文本 仅中文数字字母,无二进制 ①内置QR GB18030;②上位机位图 内置QR存在扫码乱码风险
二进制/十六进制 含0x00、0x1B、任意原始字节 ①Base64业务编码;②上位机位图 禁止直接送入内置QR指令
混合内容(中文+二进制) 中文+不可见字节 上位机位图 ESC+GM 唯一稳定方案

5. 关键风险清单

  1. ESC+BQ载荷内部逗号会触发1017命令错误;
  2. 任意载荷包含0x1B字节,会直接截断 SBPL 标签;
  3. 打印机内置 QR 不会自动转码,直接透传原始字节;
  4. GB18030 模式输出的 QR,部分扫码软件解析乱码;
  5. GL4xxE 老机型不支持简体中文,只能使用位图方案。

6. SBPL 原始指令文本样例

纯英文(ESC+2D30)

^A
^H0100^V0100
^2D30,M,04,0,0SATO_ENGLISH_TEST
^Q1
^Z

中文 GB18030(ESC+2D30,字节流,文本编辑器查看会乱码)

^A
^H0100^V0100
^2D30,M,04,0,0【GB18030中文字节】
^Q1
^Z

注:^代表ESC 0x1B,实际下发使用二进制字节流,不要下发文本^字符。