2016-11-14 63 views
0

使用來自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

回答

0

CCSID 65535告訴操作系統將數據視爲二進制數據。

因此,它不會從EBCDIC轉換爲ASCII。

處理翻譯的正確方法是使用正確的CCSID正確標記數據。

否則看看AS400Text類中可用的文本轉換。

最後,通過JDBC,可以設置強制轉換CCSID 65535的連接屬性。不知道標準連接是否有類似的東西(AS400Text可能是這樣)。

+0

是的,但是當從用戶空間讀取時,JTopen工具箱是否忽略了這一點? – bullimar

+0

@bullimar如果CCSID 65535被ToolKit忽略,很多東西都會崩潰。每個擁有二進制數據的用戶空間都會受到損壞。 – user2338816

1

A * USRSPC對象實際上只是一個有名的內存。裏面的數據可以包含你想要的任何數據。它可能包含以EBCDIC編碼的文本,某些ASCII代碼頁,UTF-8,UTF-16或任何您喜歡的文字。它可以包含一個4字節整數數組或一個矩陣或鏈接的指針列表或任何其他非文本數據。它可以包含文本和非文本數據的混合:完全取決於您的應用程序正在寫入的內容。

UserSpace JT400 API不知道* USRSPC對象中包含的數據是什麼,所以它只是讀取原始字節。您需要將這些字節讀入一個字節數組,然後使用CharConverter.byteArrayToString方法將其轉換爲Java String對象。當然,你必須通過一個有效的文本CCSID,而不是65535.