zpl.tools
Format control

^CD / ~CD - Change Delimiter

Changes the character that separates command arguments.

^CD replaces the comma between the arguments of a command, so ^FO50,50 becomes ^FO50;50. It changes arguments only. Field data after ^FD runs to ^FS and never depends on the delimiter, so ^CD is not the command that prints a comma. Reach for it where an argument itself must contain one. ^CD and ~CD are the same command. Use the tilde form between formats.

Syntax

^CDa

Also accepted with the other prefix: ~CD.

Support

Supportedparsed: full · state: full · rendered: full

Every documented parameter renders the same output Labelary produces.

Labelary renders this command.

Parameters

aDelimiter characterrequired · single character

Character that replaces , between arguments. Takes effect immediately and persists past ^XZ into the next label.

Invalid value
not possible — any value is accepted. The parser takes any single byte literally, as a raw byte rather than an argument. So ^CD, restores the comma even while another delimiter is active. With no argument the guide makes the next character received the new delimiter, and the renderer does the same. At end of input the comma stays.
Test coverage

Behavior

The change applies from the next command onwards, so the ^CD itself uses the delimiter currently in force. It therefore takes a single character rather than a comma-separated argument list.

The parser reads the new delimiter as a raw byte, not as an argument, which makes the change reversible. ^CD, sets the comma back even while a different delimiter is in force. Both renderers verify this with the example below (verified 2026-07-30).

Like the caret and tilde changes, the delimiter is parser state and persists past ^XZ into the next format. On a printer the guide notes that the change also needs ^JUS to survive a power cycle. Without it the printer defaults at restart, so do not rely on a delimiter an earlier job set.

The parser accepts any ASCII character and validates nothing, so a ^CD can break the rest of the format outright. A delimiter of ^, or of the current caret, leaves no way to tell a command from its arguments. Choose a character that appears in neither the arguments nor the prefixes.

Tested behavior

Differences from the specification

Labelary against the ZPL II guide

Where Labelary — our compatibility target — behaves differently from the printed specification.

  • Labelary documents the argument as optional with the default ,. The guide says it is required, and that a missing argument makes the next character received the new delimiter. — not pinned by a test

zpl.tools against Labelary

Where our output differs from Labelary for the same input. These are the differences that break a migration.

  • With no argument the renderer takes the next byte as the delimiter and still renders the label; Labelary renders no page. We measured this on 2026-07-30. — not pinned by a test

Example

A semicolon delimiter for one field, then back to the comma for the next. Both fields print.

^XA
^CD;
^FO50;50^A0N;40;40^FDfirst^FS
^CD,
^FO50,150^A0N,40,40^FDsecond^FS
^XZ

Open in viewer