Saltar al contenido

ZPL imprime caracteres acentuados incorrectamente

Los caracteres acentuados se imprimen incorrectamente en ZPL cuando los bytes que envía y el conjunto de caracteres que la impresora espera no coinciden. Guarde el ZPL como UTF-8, coloque ^CI28 después de ^XA, y use una fuente que tenga los glifos; ^CI28 por sí solo no añade caracteres que le falten a una fuente.

Actualizado 2026-10-20 · Renderizados hechos con el motor de OpenZPL

Abrir en el visor

Lo que ve

En la impresora, Café Müller aparece como Café Müller, como Caf? M?ller, o con espacios donde deberían estar las letras acentuadas. El resto de la etiqueta está bien.

Por qué sucede

Un archivo ZPL es un flujo de bytes. La impresora convierte esos bytes en caracteres con el conjunto de caracteres elegido por ^CI. El valor por defecto, ^CI0, lee un byte por carácter. UTF-8, que casi todos los editores y lenguajes de programación utilizan hoy, guarda é como dos bytes. Al leer un byte a la vez, esos dos bytes se convierten en dos caracteres incorrectos.

Lo que envíaBytes para éImpresora en ^CI0Impresora en ^CI28
Texto UTF-8 (la mayoría de editores, Python, Node)C3 A9éé
Texto Windows-1252 / Latin-1E9éun espacio o un carácter de reemplazo

Por lo tanto, hay tres posibles causas, y la primera columna de la tabla las distingue:

  1. Bytes UTF-8 sin ^CI28. El caso más común: dos caracteres incorrectos por acento.
  2. Bytes Latin-1 con ^CI28. El archivo fue guardado por un sistema antiguo en Windows-1252, pero la etiqueta declara UTF-8. Las letras acentuadas desaparecen.
  3. La fuente no tiene glifo para el carácter. La codificación es correcta, pero la fuente no puede dibujarlo. Este es el problema habitual con texto cirílico, griego, árabe o CJK.

La solución

Envía UTF-8 y díselo. Coloca ^CI28 una vez, justo después de ^XA, y mantenlo en cada etiqueta del archivo:

Etiqueta con el texto Café Müller, Ñandú impreso con cada acento correcto
etiqueta de 4 × 2 in a 203 dpi (8 dpmm) · 812 × 406 px · Abrir en el visor
^XA
^CI28
^FO40,40^A0N,50,50^FDCafé Müller, Ñandú^FS
^XZ

Si el ZPL proviene de una base de datos o de una exportación de ERP, verifica la codificación en el punto donde escribes el archivo o el cuerpo HTTP. En Python, zpl.encode("utf-8"); en Node, un cuerpo de cadena se envía como UTF-8 por fetch. Si no puedes cambiar la codificación de la fuente, utiliza el conjunto de caracteres que coincida en lugar de ^CI28, por ejemplo ^CI27 para Windows-1252, y prueba en tu impresora.

Cuando la fuente es el problema

^CI28 decide cómo los bytes se convierten en caracteres, no qué caracteres puede dibujar una fuente. La misma etiqueta con texto en japonés dibuja las letras latinas y deja espacios en blanco para el resto:

Etiqueta donde la palabra Tokio se imprime pero los caracteres japoneses después de ella están en blanco
etiqueta de 4 × 2 in a 203 dpi (8 dpmm) · 812 × 406 px · Abrir en el visor
^XA
^CI28
^FO40,40^A0N,50,50^FDTokyo 東京^FS
^XZ

En una impresora Zebra, la solución es una fuente que cubra el script, descargada a la impresora y seleccionada con ^A@ o mapeada con ^CW. Qué fuentes están instaladas depende del modelo de la impresora y del firmware, así que verifique la lista de fuentes de la impresora (^WD) antes de diseñar la etiqueta.

El motor de OpenZPL es más indulgente que una impresora aquí: también dibuja correctamente los acentos UTF-8 sin ^CI28. No tome una vista previa correcta como prueba de que la impresora lo imprimirá: añada ^CI28 de todos modos.

Cómo verificar

  • Abra el archivo en un visor hexadecimal, o en el visor ZPL, y mire los bytes de una letra acentuada: C3 A9 es UTF-8, E9 es Latin-1.
  • Imprima una etiqueta de prueba con una línea de cada carácter acentuado que use.
  • Si solo algunos caracteres fallan, es la fuente; si todos fallan de la misma manera, es la codificación.

Preguntas

¿Dónde va ^CI28 en la etiqueta?

Justo después de ^XA, antes del primer campo. Permanece en efecto hasta que haya otro ^CI, pero colóquelo en cada etiqueta de un archivo para que una etiqueta enviada por sí sola aún funcione.

¿Necesito ^FH para imprimir acentos?

No. ^FH le permite escribir bytes como hexadecimales, por ejemplo _C3_A9 para é en UTF-8. Ayuda cuando su sistema no puede enviar el carácter en sí, pero con UTF-8 y ^CI28 puede escribir é directamente.

Fuentes