当我使用用C#编写的Windows服务将原始字符串发送到使用转义序列启动打印机功能的收据打印机时。如:
\x1b\x64\x02
操作切纸器。
我在另一台服务器上使用收据模板文件,并将基本64位编码的文本放入XML中,以便将其提供给Windows服务。问题是,当从XML中提取文本时,文本字面上会打印在收据上,而且它与未转换的转义字符有关。
我猜测当我在Visual Studio中输入这些转义序列时,它代表字符串中的ANSI字符(因为当我这样做然后切纸机触发时它会起作用)。
如何将包含转义序列的字符串转换为在C#Windows服务中使用的正确格式?目标是将这些简单的转义序列键入模板文件,然后在另一端正确转换它们。
我目前正在尝试解码base 64然后转换为ANSI编码的C#代码:
byte[] data = Convert.FromBase64String(content);
content = Encoding.Default.GetString(data);
byte[] utf8Bytes = Encoding.UTF8.GetBytes(content);
content = Encoding.GetEncoding("Windows-1252").GetString(utf8Bytes);
return RawPrinterHelper.SendStringToPrinter(getConfig().receiptPrinter, content);
以下是服务收到的测试收据的内容:
XHgxYlx4MWRceDYxXHgxIE1OSG9tZU91dGxldC5jb20yMzAwIFdlc3QgSGlnaHdheSAxMw0KQnVybnN2aWxsZSwgTU4gNTUzMzcNCjk1Mi0yNzktMTU4Nw0KDQpceDFiXHgxZFx4NjFceDBceDFiXHg0NFx4Mlx4MTBceDIyXHgwIERhdGU6IDIwMTctMDYtMTVceDkgVGltZTogMzo0NmFtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIA0KXHgxYlx4NDUgU0FMRSANClx4MWJceDQ2
当我基于64编码\x7
时,例如,
Bw==
(以ASCII为单位)BwA=
(作为Unicode)XHg3
答案 0 :(得分:0)
所以我找到了一个需要对模板进行少量更改的解决方案:
在模板方面,使用PHP,我将\x7
样式的unicode引用转换为
,然后在我对64进行编码之前:
$receipt_str = mb_convert_encoding($receipt_str, 'UTF-8', 'HTML-ENTITIES');
到目前为止这是有效的。我不确定是否有更好的方法,或者是否有限制。