2016-11-14 4 views
0

JTOpenのUserSpaceオブジェクトを使用してIBMiシステムから読み取ると、データがEBCDICからASCIIに変換されるか、UserSpace.read()メソッドを使用してEBCDICのま​​まになります。JTOpen 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を使用しています。

ありがとうございます。

+0

以下に述べるように、CCSID 65535は定義上効果的に「変換なし」です。エンコード(EBCDICからASCIIまたはUnicodeなど)の間で変換が必要な場合は、CCSID 65535を使用しないでください。しかし、... CCSIDのバイト数を知っていますか?たとえば、システム上のジョブのデフォルトのCCSIDは何ですか?元々期待されていたCCSIDがわかっていれば、それは可能なはずです。 – user2338816

答えて

0

CCSID 65535は、OSにデータをバイナリとみなすように指示します。

したがって、EBCDICからASCIIには変換されません。

翻訳を正しく処理するには、データを正しいCCSIDで正しくタグ付けすることです。

それ以外の場合は、AS400Textクラスで使用できるテキスト変換を参照してください。

最後に、JDBCでは、CCSID 65535を強制的に変換するように設定できる接続プロパティーがあります。標準接続(AS400Textの場合もあります)と同様のものがあるかどうかはわかりません。

+0

はい、しかし、JTopenツールボックスはユーザー空間から読み込むときにこれを無視しますか? – bullimar

+0

@bullimar CCSID 65535がToolKitによって無視された場合、多くのことがクラッシュします。バイナリデータを保持していたすべてのユーザスペースが混乱してしまいます。 – user2338816

1

* USRSPCオブジェクトは、実際には名前の付いたメモリです。内部のデータには、必要なデータを含めることができます。 EBCDIC、ASCIIコードページ、UTF-8、UTF-16などでエンコードされたテキストを含めることができます。それは、4バイトの整数の配列またはポインタまたは他の非テキストデータのマトリックスまたはリンクされたリストを含むことができる。テキストと非テキストのデータが混在している可能性があります。アプリケーションが書いている内容までです。

UserSpace JT400 APIは、* USRSPCオブジェクトに含まれるデータがわからないため、生のバイトを読み込むだけです。これらのバイトをバイト配列に読み込んで、CharConverter.byteArrayToStringメソッドを使用して、それをJava Stringオブジェクトに変換する必要があります。もちろん、65535ではなく、有効なテキストCCSIDを渡す必要があります。