ZPLToolkit

^CI

Change International Font/EncodingPreview: partial

Selects the printer character set or Unicode encoding used to interpret later field data.

Syntax

^CIa,s1,d1,s2,d2,...

Parameters

ParameterDescription and accepted valuesIf omitted
aCharacter-set or encoding number. Use 28 for UTF-8 in a modern label.0 to 30 character-set or encoding id0
s1,d1,...Optional pairs that remap source character codes to destination codes for the selected legacy set.Source and destination remapping pairsNone

How it works

^CI selects how the printer reads the bytes in text fields. The ordinary Latin code pages map the same byte differently, while ^CI28 selects UTF-8 for labels that carry accents, names and other Unicode text.

For legacy code pages, the optional source-and-destination pairs remap individual character values. Keep that mapping close to the integration that emits the bytes: a printer setting cannot repair data that was already encoded with the wrong character set.

Hexadecimal field data needs both ^CI28 and ^FH when UTF-8 bytes are written as _XX sequences. That makes a label portable through systems that cannot safely send literal non-ASCII characters.

Example

ZPL
^XA
^CI28
^FO40,60^A0N,40,40^FH^FDFran_C3_A7ais^FS
^XZ

Rendering…

^CI28 and ^FH decode the UTF-8 bytes for the ç in Français.
Open in the viewer

How the preview on this site handles it

^CI28 plus ^FH UTF-8 bytes are decoded before rendering. Other printer code pages and their custom remapping pairs are recognized but not reproduced, so the compatibility layer warns before relying on them.

Common mistakes

  • Sending literal accented text without ^CI28. A printer reading its single-byte default produces the wrong glyphs.
  • Selecting ^CI28 but writing a Latin-1 byte sequence. UTF-8 is a byte encoding, not a switch that repairs existing data.
  • Applying ^FH without escaping every non-ASCII byte. Each UTF-8 byte must be expressed separately as an _XX sequence.

See also