首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从RPG程序到Java程序的希伯来语数据顺序不正确

从RPG程序到Java程序的希伯来语数据顺序不正确
EN

Stack Overflow用户
提问于 2013-06-07 02:25:22
回答 1查看 319关注 0票数 1

我将希伯来语数据从RPG程序发送到Java程序,但有些数据并未按预期传入。RPG程序在CCSID为65535的iSeries机器上运行。通过远程方法调用来访问java。

大多数希伯来语是由Java程序按逻辑顺序接收的。然后,我使用Java的Bidi类对其进行处理,以便在最终将其写入PDF时将其转换为可视顺序。除了几行方程式之外,几乎所有的数据都是OK的。

假设大写H是希伯来语数据。这行代码应该是这样的:300 X 250 X 500 :HHHH

我收到的代码行是这样的:HHHH: 500 250 X 300 X

500不在我期望的顺序中,Bidi类没有正确处理它。像这样的几行代码,是Bidi类唯一不能使用的代码行。我假设这一行是:HHHH: 300 X 250 X 500,因为我相信这是逻辑顺序。它似乎将500保留在RTL部分,然后在它达到X时翻转到LTR。有人知道为什么会这样吗?

谢谢你的帮助。

编辑: java实际上是通过JNI而不是RMI调用的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-10 21:15:47

因此,我最终找出了这里发生了什么,并回答了我自己的问题,以防其他人遇到类似的问题。

希伯来语被存储在代码页424中的iSeries上。这是一个希伯来语代码页,所以在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,我可以用它做同样的事情来转换它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16969418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档