2017-06-19 79 views
0

我正在写一个Delphi 2009程序,它将escape命令发送到打印条形码的标签打印机。参考Sending printer specific commands,我可以使用Windows.Escape()来完成这项工作。但我的问题是我们的数据库存储UTF8数据(用于存储不同的语言),请问Windows.Escape()是否接受UTF8数据?德尔福2009 - 用UTF8发送打印机命令

感谢

*我发现逃生接受PAnsiChar ... enter image description here

回答

1

当使用PASSTHROUGH,作为链接代码执行时,Escape API接受这是不以任何方式处理的原始8个数据通过Escape。数据直接传递到设备。

您可以了解从文档Escape功能:https://msdn.microsoft.com/en-us/library/windows/desktop/dd162701.aspx

如果打印机支持UTF-8,那么你的方法应该工作。但是,如果打印机不理解UTF-8,它将会失败。换句话说,这不是关于Escape的问题,而是关于您的打印机的问题。您需要查阅其文档。

阅读你的问题的行之间,似乎你让你的数据库中使用的编码驱动你关于打印的想法。在我看来,这是错误的。数据库和打印机之间没有任何关系。打印机是否理解UTF-8与您的数据库文本编码无关。您需要先确定打印机需要什么编码。如果它与数据库使用的不同,那么您将需要转换。从一种编码转换为另一种编码通常很简单。

+0

感谢您的回复!但是我发现Escape在Delphi 2009中接受了PAnsiChar(https://i.stack.imgur.com/6jOwP.jpg)。它可以接受UTF8数据吗? – rardark

+0

'PAnsiChar'是一个指向8位字符的空终止数组的指针。它们如何编码是一个单独的问题。 Delphi和C++一样,对于不同的8位编码没有单独的字符类型。 ANSI和UTF-8在C++中保存在'char'中。映射到Delphi,C++'char'成为Delphi'AnsiChar'。所以是的,你可以传递一个UTF-8编码的8位'AnsiChar'元素数组。接下来发生的事情就是打印机。你有没有证据能够理解UTF-8编码数据? –

+0

提到以null结尾的字符数组,并不是'Escape'接受指定字节长度的参数。这是必需的,因为数据不需要是文本。严格地说,这个函数应该可以接受一个字节数组,但是这是出于历史原因。 –