我的应用程序在Zebra EM220移动打印机上打印。我的国家字符编码在代码页CP852(支持打印机)中,但Delphi显然工作在Unicode。
打印机库有一个打印文本的方法,它将JString作为文本参数传递。不幸的是,使用StringToJString并不能很好地工作,因为有一个额外的"?"或者在每个我的国民角色之前“t”。看起来打印机需要单字节编码文本,并且在两个字节处它不知道该怎么做。
现在的问题是:如何将Unicode字符串编码为单字节字符串i CP852代码页并将其作为JString参数传递?
答案 0 :(得分:3)
如何将Unicode字符串编码为单字节字符串i CP852代码页并将其作为JString参数传递?
可以使用Delphi的代码分段AnsiStrings功能,或Delphi RTL的LocaleCharsFromUnicode()
功能,甚至Java&#39,将Unicode数据转换为特定的单字节字符集。 ;通过JNI的String.getBytes()
方法。
但是你不能在JString
参数中传递单字节数据,也不应该尝试。
JString
是Delphi的Android's native Java String
type包装器,它是一个UTF-16编码的字符串,就像Delphi's native UnicodeString
type一样。
如果您的打印机库真的以JString
作为输入,那么StringToJString()
将正常工作。它只是简单地将UTF-16数据从Delphi UnicodeString
复制到Java String
。
在将数据发送到实际打印机时,将Java String
数据从UTF-16转换为CP852(或其他)是图书馆的责任。
如果您在向库中发送特定字符时遇到问题,则与其他内容有关,例如发送CP852中不存在的Unicode字符。在Java中使用带有库的Unicode文本时,使用Unicode文本和Delphi中的库时遇到的任何麻烦都应该存在,因为输入方式是相同的。