如果我将以下ZPL命令发送到Zebra打印机,它会打印AmitiÙ
:
^XA
^FO50,20
^CI7
^A0N,25,15
^FD
Amitié
^FS
^XZ
ANSI
。^CI7
(7 =>单字节编码 - 法国1字符集)。另一方面,如果我将下面的ZPL命令发送到Zebra打印机,它会打印Amitié
(这是我实际需要获得的):
^XA
^FO50,20
^CI28
^A0N,25,15
^FD
Amitié
^FS
^XZ
UTF-8
。^CI28
(28 => Unicode(UTF-8编码) - Unicode字符集)。你知道第一种情况出了什么问题吗?
感谢您的帮助。
答案 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出现问题。请参阅ANSI和UTF-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-1252或ISO-8859-1 (latin1)。
Windows-1252中的字符^CI
和latin1是#00E9,但是850中的é
;你需要850中的Ú
#0082。使用é
你显然也会得到一个^CI7
#007B,因为那是用该命令做出的特定字符替换之一。
使用UTF8(带é
)可能是一种可行的方式,因为它得到了广泛的支持和理解,但请注意,您也可以尝试^CI28
(即使您有Zebra固件的旧版本,不支持^CI27
)并且应该为您提供代码页1252.如果这不起作用,您需要使用代码页对文本进行编码850。
答案 3 :(得分:0)
这就是我要做的:
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();
}
为了达成解决方案而收集的信息: