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(如果有的话)。
谢谢。
CCSID 65535告诉操作系统将数据视为二进制数据。
因此,它不会从EBCDIC转换为ASCII。
处理翻译的正确方法是使用正确的CCSID正确标记数据。
否则看看AS400Text类中可用的文本转换。
最后,通过JDBC,可以设置强制转换CCSID 65535的连接属性。不知道标准连接是否有类似的东西(AS400Text可能是这样)。
是的,但是当从用户空间读取时,JTopen工具箱是否忽略了这一点? – bullimar
@bullimar如果CCSID 65535被ToolKit忽略,很多东西都会崩溃。每个拥有二进制数据的用户空间都会受到损坏。 – user2338816
A * USRSPC对象实际上只是一个有名的内存。里面的数据可以包含你想要的任何数据。它可能包含以EBCDIC编码的文本,某些ASCII代码页,UTF-8,UTF-16或任何您喜欢的文字。它可以包含一个4字节整数数组或一个矩阵或链接的指针列表或任何其他非文本数据。它可以包含文本和非文本数据的混合:完全取决于您的应用程序正在写入的内容。
UserSpace
JT400 API不知道* USRSPC对象中包含的数据是什么,所以它只是读取原始字节。您需要将这些字节读入一个字节数组,然后使用CharConverter.byteArrayToString
方法将其转换为Java String对象。当然,你必须通过一个有效的文本CCSID,而不是65535.
如下所述,CCSID 65535根据定义是无效的。如果需要在编码之间进行转换(例如EBCDIC到ASCII或Unicode),则不要使用CCSID 65535.但是......您是否知道将字节写入的CCSID是什么?例如,系统上作业的默认CCSID是什么?如果最初预期的CCSID是已知的,那么这种或那种方式应该是可能的。 – user2338816