JTOpen用户空间读取

问题描述:

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

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

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(如果有的话)。

谢谢。

+0

如下所述,CCSID 65535根据定义是无效的。如果需要在编码之间进行转换(例如EBCDIC到ASCII或Unicode),则不要使用CCSID 65535.但是......您是否知道将字节写入的CCSID是什么?例如,系统上作业的默认CCSID是什么?如果最初预期的CCSID是已知的,那么这种或那种方式应该是可能的。 – user2338816

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

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

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

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

最后,通过JDBC,可以设置强制转换CCSID 65535的连接属性。不知道标准连接是否有类似的东西(AS400Text可能是这样)。

+0

是的,但是当从用户空间读取时,JTopen工具箱是否忽略了这一点? – bullimar

+0

@bullimar如果CCSID 65535被ToolKit忽略,很多东西都会崩溃。每个拥有二进制数据的用户空间都会受到损坏。 – user2338816

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

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