2017-06-19 88 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'接受指定字節長度的參數。這是必需的,因爲數據不需要是文本。嚴格地說,這個函數應該可以接受一個字節數組,但是這是出於歷史原因。 –