Delphi 10.1 Android应用程序。如何将单字节文本作为JString传递。

时间:2017-11-02 20:21:12

标签: android delphi unicode

我的应用程序在Zebra EM220移动打印机上打印。我的国家字符编码在代码页CP852(支持打印机)中,但Delphi显然工作在Unicode。

打印机库有一个打印文本的方法,它将JString作为文本参数传递。不幸的是,使用StringToJString并不能很好地工作,因为有一个额外的"?"或者在每个我的国民角色之前“t”。看起来打印机需要单字节编码文本,并且在两个字节处它不知道该怎么做。

现在的问题是:如何将Unicode字符串编码为单字节字符串i CP852代码页并将其作为JString参数传递?

1 个答案:

答案 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中的库时遇到的任何麻烦都应该存在,因为输入方式是相同的。