我正在写一个Delphi 2009程序,它将escape命令发送到打印条形码的标签打印机。参考Sending printer specific commands,我可以使用Windows.Escape()来完成这项工作。但我的问题是我们的数据库存储UTF8数据(用于存储不同的语言),请问Windows.Escape()是否接受UTF8数据?德尔福2009 - 用UTF8发送打印机命令
感谢
我正在写一个Delphi 2009程序,它将escape命令发送到打印条形码的标签打印机。参考Sending printer specific commands,我可以使用Windows.Escape()来完成这项工作。但我的问题是我们的数据库存储UTF8数据(用于存储不同的语言),请问Windows.Escape()是否接受UTF8数据?德尔福2009 - 用UTF8发送打印机命令
感谢
当使用PASSTHROUGH
,作为链接代码执行时,Escape
API接受这是不以任何方式处理的原始8个数据通过Escape
。数据直接传递到设备。
您可以了解从文档Escape
功能:https://msdn.microsoft.com/en-us/library/windows/desktop/dd162701.aspx
如果打印机支持UTF-8,那么你的方法应该工作。但是,如果打印机不理解UTF-8,它将会失败。换句话说,这不是关于Escape
的问题,而是关于您的打印机的问题。您需要查阅其文档。
阅读你的问题的行之间,似乎你让你的数据库中使用的编码驱动你关于打印的想法。在我看来,这是错误的。数据库和打印机之间没有任何关系。打印机是否理解UTF-8与您的数据库文本编码无关。您需要先确定打印机需要什么编码。如果它与数据库使用的不同,那么您将需要转换。从一种编码转换为另一种编码通常很简单。
感谢您的回复!但是我发现Escape在Delphi 2009中接受了PAnsiChar(https://i.stack.imgur.com/6jOwP.jpg)。它可以接受UTF8数据吗? – rardark
'PAnsiChar'是一个指向8位字符的空终止数组的指针。它们如何编码是一个单独的问题。 Delphi和C++一样,对于不同的8位编码没有单独的字符类型。 ANSI和UTF-8在C++中保存在'char'中。映射到Delphi,C++'char'成为Delphi'AnsiChar'。所以是的,你可以传递一个UTF-8编码的8位'AnsiChar'元素数组。接下来发生的事情就是打印机。你有没有证据能够理解UTF-8编码数据? –
提到以null结尾的字符数组,并不是'Escape'接受指定字节长度的参数。这是必需的,因为数据不需要是文本。严格地说,这个函数应该可以接受一个字节数组,但是这是出于历史原因。 –