在ZPL中打印具有锐角的字符

时间:2015-04-03 17:55:25

标签: utf-8 character-encoding zebra-printers zpl

如果我将以下ZPL命令发送到Zebra打印机,它会打印AmitiÙ

^XA
^FO50,20
^CI7
^A0N,25,15
^FD
Amitié
^FS
^XZ
  • 请注意,文件编码为ANSI
  • 请注意使用ZPL命令^CI7(7 =>单字节编码 - 法国1字符集)。

另一方面,如果我将下面的ZPL命令发送到Zebra打印机,它会打印Amitié(这是我实际需要获得的):

^XA
^FO50,20
^CI28
^A0N,25,15
^FD
Amitié
^FS
^XZ
  • 请注意,文件编码为UTF-8
  • 请注意使用ZPL命令^CI28(28 => Unicode(UTF-8编码) - Unicode字符集)。

你知道第一种情况出了什么问题吗?

感谢您的帮助。

4 个答案:

答案 0 :(得分:8)

通过在ZPL模板顶部放置^CI28命令来使用UTF-8,例如

^XA
^CI28
^CF0,80
^FO70,40^FDavión^FS
^XZ

答案 1 :(得分:1)

如果您将第一个示例复制并粘贴到可以在UTF-8和ANSI(Notepad ++)之间进行转换的文本编辑器中,您将看到第一个示例编码为

^XA
^FO50,20
^CI7
^A0N,25,15
^FD
Amitié
^FS
^XZ

这会在渲染时导致ZPL出现问题。请参阅ANSIUTF-8的在线示例。

要解决此问题,您可以先对值进行编码(例如以十六进制编码,然后使用^FH作为前缀)

答案 2 :(得分:1)

根据Zebra class Test extends Component { render() { return ( <div> <h1>I AM TEST</h1> </div> ); } } 的编程指南document使用7将为您Code Page 850提供一些特定的字符替换。当您说您使用ANSI编码的文件时,我认为您的意思是Code Page Windows-1252ISO-8859-1 (latin1)

Windows-1252中的字符^CI和latin1是#00E9,但是850中的é;你需要850中的Ú#0082。使用é你显然也会得到一个^CI7#007B,因为那是用该命令做出的特定字符替换之一。

使用UTF8(带é)可能是一种可行的方式,因为它得到了广泛的支持和理解,但请注意,您也可以尝试^CI28(即使您有Zebra固件的旧版本,不支持^CI27)并且应该为您提供代码页1252.如果这不起作用,您需要使用代码页对文本进行编码850。

答案 3 :(得分:0)

这就是我要做的:

  • 使用 ^ CI28
  • 定义UTF-8字符集
  • 使用瑞士unicode字体。就我而言,我只需要在一行上编码,就不想更改文档或打印机设置上的其他任何内容。为此,我使用了 ^ A @ N,44,30,E:TT0003M_.TTF 。如果要定义整个文档的字体,请检查下面的第一个链接。
  • 准备紧接 ^ FD
  • 之前的字符串以使用 ^ FH 识别UTF-8编码。
  • 对文档进行编码,以用其HEX表示形式替换非ASCII字符:
    private static string ZebraEncode(string text)
    {
        var ret = new StringBuilder();

        var unicodeCharacterList = new Dictionary<char, string>();
        foreach(var ch in text)
        {
            if (!unicodeCharacterList.ContainsKey(ch))
            {
                var bytes = Encoding.UTF8.GetBytes(ch.ToString());
                if (bytes.Length > 1)
                {
                    var hexCode = string.Empty;
                    foreach(var b in bytes)
                    {
                        hexCode += $"_{BitConverter.ToString(new byte[] { b }).ToLower()}";
                    }

                    unicodeCharacterList[ch] = hexCode;
                }
                else
                    unicodeCharacterList[ch] = ch.ToString();

                ret.Append(unicodeCharacterList[ch]);
            }
            else
                ret.Append(unicodeCharacterList[ch]);
        };

        return ret.ToString();
    }

为了达成解决方案而收集的信息: