在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字符集)

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

谢谢你的帮助。

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

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

根据Zebra ^CI的编程指南文档,使用7将获得带有一些特定字符替换的代码页850。当你说你的文件是用ANSI编码的,我想你指的是代码页Windows-1252或ISO-8859-1(latin1)。

Windows-1252和latin1中的字符é是#00E9,但在850中是Ú;您可能想要850中é的#0082。使用^CI7,显然也可以得到一个带有#007B的é,因为这是使用该命令进行的特定字符替换之一。

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

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

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

这将导致ZPL在渲染时出现问题。请参阅ANSI和UTF-8的联机示例。

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

以下是我所做的:

  • 使用^CI28定义UTF-8字符集
  • 使用瑞士unicode字体。对于我的情况,我只需要在一行上编码,我不想更改文档或打印机设置上的任何其他内容。为此,我使用了^A@N,44,30,E:TT0003M_.TTF。如果你想定义整个文档的字体,请查看下面的第一个链接
  • 准备字符串以识别^FH紧接在^ FD之前的UTF-8编码
  • 对文档进行编码,以将非ASCII字符替换为其HEX表示形式:
    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();
    }

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

  • 在zebra-zpl打印机上下载和使用字体
  • ZPL在线编辑器
  • 这个问题的混合答案

相关内容

  • 没有找到相关文章

最新更新