0

当使用来自 JTOpen 的 UserSpace 对象从 IBMi 系统读取数据时,数据是使用 UserSpace.read() 方法从 EBCDIC 转换为 ASCII 还是保留在 EBCDIC 中。

如果确实如此,是否有办法告诉它不要转换它或以不同的方式读取该数据。或者有没有办法只获取数据的字节表示。下面是我看到的用户空间,在一个完美的世界中,将其作为长字符串或字节数组是理想的。

24787779 5158B126 69675175 72536799
9BC7D489 85795158 B1276A96 A38580A3
A7676B37 25797288 A3A845D7 9996A674
74735496 99C7D389 8788A459 B2276866
96A38C83 A3969036 26797679 53A840D7
97D9D6E3 C5C3E3D6 D98794C9 C7C8E3E8

如果这很重要,我正在尝试读取的用户空间使用 CCSID 65535。

谢谢你。

4

2 回答 2

1

*USRSPC 对象实际上只是一块命名的内存。里面的数据可以包含你想要的任何数据。它可以包含以 EBCDIC、一些 ASCII 代码页、UTF-8、UTF-16 或任何您喜欢的方式编码的文本。它可以包含一个 4 字节整数数组或矩阵或指针链接列表或任何其他非文本数据。它可能包含文本和非文本数据的混合:这完全取决于您的应用程序写入的内容。

JT400 UserSpaceAPI 不知道 *USRSPC 对象中包含的数据是什么,因此它只读取原始字节。您需要将这些字节读入字节数组并使用该CharConverter.byteArrayToString方法将其转换为 Java String 对象。当然,您必须传递一个有效的文本 CCSID,而不是 65535。

于 2016-11-17T02:26:36.677 回答
0

CCSID 65535 告诉操作系统将数据视为二进制。

因此,它不会从 EBCDIC 转换为 ASCII。

处理翻译的正确方法是使用正确的 CCSID 正确标记数据。

否则,请查看 AS400Text 类中可用的文本转换。

最后,使用 JDBC,您可以设置一个连接属性来强制转换 CCSID 65535。不确定标准连接是否有类似的东西(可能是 AS400Text)。

于 2016-11-14T16:41:53.353 回答