android - 德尔福 10.1 Android 应用程序。如何将单字节文本作为 JString 传递。

标签 android delphi unicode

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

打印机库有一个打印文本的方法,该方法将 JString 作为文本参数传递。不幸的是,使用 StringToJString 效果不佳,因为打印了一个额外的“?”或每个我的国家字符前的“t”。看起来打印机需要一个单字节编码的文本,而在两个字节时它不知道该做什么。

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

最佳答案

How can I encode Unicode string to a single-byte string i CP852 code page and pass this as JString param?

可以将 Unicode 数据转换为特定的单字节字符集,使用诸如 Delphi 的代码页 AnsiStrings 功能,或 Delphi RTL 的 LocaleCharsFromUnicode() 函数,甚至是 Java 的 String.getBytes()通过 JNI 的方法。

但是您不能在 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 字符。在 Delphi 中对库使用 Unicode 文本时遇到的任何问题在 Java 中对库使用 Unicode 文本时也应该存在,因为两种方式的输入都是相同的。

关于android - 德尔福 10.1 Android 应用程序。如何将单字节文本作为 JString 传递。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47084007/

相关文章:

Android:自定义可选择的 ListView 项目

android - 我在三星和谷歌最新版本的移动设备中遇到 android 媒体播放器错误 (-38, 0)

android - 用于调试 Android 的 repo 'bisect'?

delphi - 获取 Delphi 中 CreateProcess 创建的程序的 PiD

delphi - 将 Delphi TLabel 的字体更改为斜体会砍掉尾部 - 为什么?

windows - 如何在 Linux 中使用 POSIX 方法从文件中读取 Unicode-16 字符串?

java - 如何在主 UI 线程的不同线程中执行处理程序

delphi - 当我的 EXE 文件名包含单词 "update"时,如何避免 UAC?

python - 如何在 pytables 中创建可以存储 Unicode 字符串的压缩数据集?

bash - 如何使用 bash/shell/zsh 将字符串中的所有 UTF8 Unicode 字符转换为其相关的代码点?