JTOpen UserSpace Читать
При чтении из системы IBMi с использованием объекта UserSpace из JTOpen данные преобразуются из EBCDIC в ASCII или остаются в EBCDIC с использованием методов UserSpace.read().
Если это так, есть способ сказать ему, чтобы он не конвертировался, или другой способ чтения этих данных. Или есть способ просто получить байтовое представление данных. Ниже я вижу то, что я вижу, когда смотрю на пользовательское пространство глазами, и в идеальном мире идеальным представляется получение длинной строки или байтового массива.
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, если это имеет значение.
Спасибо.
2 ответа
Объект *USRSPC - это просто именованный фрагмент памяти. Данные внутри могут содержать любые данные, которые вы хотите. Он может содержать текст, закодированный в EBCDIC, некоторую кодовую страницу ASCII, UTF-8, UTF-16 или что угодно. Он может содержать массив 4-байтовых целых чисел или матрицу или связанный список указателей или любые другие нетекстовые данные. Он может содержать сочетание текстовых и нетекстовых данных: все зависит от того, что ваше приложение записывает в него.
UserSpace
JT400 API не знает, какие данные содержатся в объекте *USRSPC, и поэтому он просто читает необработанные байты. Вам нужно будет прочитать эти байты в массив байтов и использовать CharConverter.byteArrayToString
метод для преобразования его в объект Java String. Конечно, вам нужно будет передать действительный текст CCSID, а не 65535.
CCSID 65535 говорит ОС считать данные двоичными.
Таким образом, он не будет переведен из EBCDIC в ASCII.
Правильный способ обработки перевода - правильно пометить данные с правильным CCSID.
В противном случае взгляните на преобразование текста, доступное в классе AS400Text.
Наконец, в JDBC есть свойство соединения, которое вы можете установить для принудительного преобразования CCSID 65535. Не уверен, есть ли что-то похожее для стандартного соединения (возможно, это AS400Text).