当使用来自JTOpen的UserSpace对象从IBMi系统读取数据时,使用UserSpace.read()方法,数据是从EBCDICASCII码转换成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。
谢谢。
发布于 2016-11-17 10:26:37
USRSPC对象实际上只是一块命名的内存。里面的数据可以包含你想要的任何数据。它可以包含以EBCDIC、一些ASCII代码页、UTF-8、UTF-16或您喜欢的任何格式编码的文本。它可以包含一个4字节整数数组、一个矩阵、一个指针链表或任何其他非文本数据。它可以包含文本和非文本数据的混合:这完全取决于您的应用程序向其中写入的内容。
UserSpace JT400应用程序接口不知道*USRSPC对象中包含的数据是什么,因此它只读取原始字节。您需要将这些字节读入字节数组,并使用CharConverter.byteArrayToString方法将其转换为Java String对象。当然,您必须传递一个有效的文本CCSID,而不是65535。
发布于 2016-11-15 00:41:53
CCSID 65535告诉OS将数据视为二进制。
因此,它不会从EBCDIC转换为ASCII。
处理转换的正确方法是用正确的CCSID正确地标记数据。
否则,看看AS400Text类中可用的文本转换。
最后,对于JDBC,您可以设置一个连接属性来强制转换CCSID 65535。不确定标准连接是否有类似的东西(可能是AS400Text)。
https://stackoverflow.com/questions/40593409
复制相似问题