gpt4 book ai didi

java - 从 RPG 程序到 Java 程序的希伯来语数据顺序错误

转载 作者:行者123 更新时间:2023-12-01 04:38:39 26 4
gpt4 key购买 nike


我正在将希伯来语数据从 RPG 程序发送到 Java 程序,但某些数据未按预期传入。 RPG程序运行在CCSID 65535的iSeries机器上。通过远程方法调用访问java。
Java 程序按逻辑顺序接收大部分希伯来语。然后,我使用 Java 的 Bidi 类对其进行处理,使其按视觉顺序排列,最终将其写入 PDF。除了几行方程之外,几乎所有数据都可以。

假设大写的 H 是希伯来语数据。该行应如下所示:300 X 250 X 500 :HHHH
我收到的行如下:HHHH: 500 250 X 300 X< br/>500 的顺序不符合我的预期,并且 Bidi 类无法正确处理它。有几行诸如此类,并且是 Bidi 类无法使用的唯一行。我假设该行的输入格式为:HHHH: 300 X 250 X 500,因为我相信这将是逻辑顺序。它似乎将 500 保留在 RTL 部分,然后一旦到达 X 就翻转到 LTR。有人知道为什么会这样吗?

感谢您的帮助。
编辑:java实际上是通过JNI而不是RMI调用的。

最佳答案

所以我最终发现了这里发生的事情,并回答我自己的问题,以防其他人遇到类似的问题。

希伯来语存储在 iSeries 上的代码页 424 中。这是希伯来语代码页,因此 iSeries 上的存储一切顺利。我们在 iSeries 上有一些打印驱动程序可以正确处理希伯来语数据,因此我知道问题要么出在 iSeries 和 Java 之间的传输上,要么出在我们在 Java 中创建数据字符串时。

事实证明,iSeries 按打印顺序存储希伯来语,因此它已经按照我将其写入 PDF 所需的顺序排列。当我们将其传输到 Java 程序时,我们使用的是 RPG 字符字节数组。该字符字节数组在发送到 Java 方法时将转换为 Unicode。此 Unicode 转换将尝试处理已经按正确顺序排列的 Bidi 数据,并且正在将数据移至无序的位置。修复方法是切换到 RPG 整数字节数组,该数组不会执行此转换。然后,当我在 Java 中接收字节数组时,我从 AS400 对象获取作业的 CCSID,并用它创建一个新的字符串。

作业的 CCSID 以字符集形式返回。因此,在我们基于美国的系统上,这将返回 Cp037,我可以在 new String(byte[] source, String charsetName) 构造函数中使用它,它将转换 EBCDIC 代码页中的字节数组到Java的编码。在基于希伯来语的系统上,这将返回 Cp424,我可以用它做同样的事情来转换它。

关于java - 从 RPG 程序到 Java 程序的希伯来语数据顺序错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16969418/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com