Stripy Horse
Stripy Horse

Print Arabic, Russian & Unicode on Zebra printers

Zebra printers can't render Arabic (no contextual joining, no right-to-left) and choke on Cyrillic and most other scripts, the ^CI encoding minefield. Paste your ZPL: fields the printer can't draw are shaped like a browser would and rasterized in place; ASCII text, barcodes and everything else stays native, byte for byte. Emoji and symbols too: the sample ships a smiley and a chess board.

Output carries a light watermark. Sign in and create a free API key; then every run here is watermark-free (500 credits a month, no card).

printable preview appears here

About the Unicode fixer

Zebra printers render text with their built-in fonts, and outside Latin scripts those fonts usually have no glyphs, no right-to-left ordering and no contextual shaping, so Arabic prints as disconnected boxes and Cyrillic prints as question marks. The Unicode fixer finds the fields the printer cannot draw and replaces each with a bitmap rasterized here, using HarfBuzz shaping and the Noto fonts, at the exact position, size and rotation of the original field.

Fields the printer can draw natively (ASCII text, barcodes, graphics) are left untouched, so the ZPL stays small and the barcodes keep scanning. The result is standard ZPL any Zebra prints, no firmware fonts to install and no ^CI code-page guesswork.

Arabic joins and reads right to left, Hebrew reads right to left, Cyrillic and Greek get real glyphs, and symbols and emoji print as black-and-white glyphs.

Your data: Your ZPL is processed in memory and discarded when the response is sent; nothing is stored, logged or read by a person. Anonymous runs carry a small stripyhorse.io logo in the corner; sign in for clean output. Details in the privacy policy.

Questions

Why does my Zebra print Arabic as boxes or question marks?

The printer's fonts have no glyphs for those characters and the firmware does no shaping. Rasterizing the text here into a ^GFA bitmap sidesteps both: the printer prints a picture of the correctly shaped text.

Does this change my barcodes or layout?

No. Only text fields with characters the printer cannot draw are replaced, at the same ^FO or ^FT position and size. Everything else, including barcodes, is passed through byte for byte.

Which languages work?

What the bundled DejaVu and Noto faces cover: Latin with every accent, Greek, Cyrillic, Arabic, Hebrew, symbols and emoji. Chinese, Japanese and Korean are not bundled yet; a field in those scripts is reported rather than guessed.

Can I do this in my application?

Yes. POST /v1/unicode (or the SDK method) with the same ZPL and get the printable ZPL back; do it once at print time and send the result to the printer.

The same engine is behind the API and the guides; every tool here is also an API call.