應用程式資料轉換

必要時, MCA 會將訊息描述子及標頭資料轉換為必要的字集及編碼。 鏈結的任一端 (即本端 MCA 或遠端 MCA) 可以執行轉換。

當應用程式將訊息放入佇列時,本端佇列管理程式會將控制資訊新增至訊息描述子,以協助在佇列管理程式及 MCA 處理訊息時對訊息進行控制。 視環境而定,會在本端系統的字集及編碼中建立訊息標頭資料欄位。

當您在系統之間移動訊息時,有時需要將應用程式資料轉換成接收系統所需的字集及編碼。 可以從接收系統上的應用程式內,或由傳送系統上的 MCA 來執行此動作。 如果在接收系統上支援資料轉換,請使用應用程式來轉換應用程式資料,而不是根據傳送系統上已發生的轉換而定。

當您在傳遞至 MQGET 呼叫之 MQGMO 結構的 Options 欄位中指定 MQGMO_CONVERT 選項時,以及當 所有 下列陳述式都成立時,會在應用程式內轉換應用程式資料:
  • 與佇列上訊息相關聯的 MQMD 結構中設定的 CodedCharSetIdEncoding 欄位與 MQGET 呼叫中指定的 MQMD 結構中設定的 CodedCharSetIdEncoding 欄位不同。
  • 與訊息相關聯的 MQMD 結構中的 Format 欄位不是 MQFMT_NONE。
  • MQGET 呼叫中指定的 BufferLength 不是零。
  • 訊息資料長度不是零。
  • 佇列管理程式支援在與訊息及 MQGET 呼叫相關聯的 MQMD 結構中指定的 CodedCharSetIdEncoding 欄位之間進行轉換。 如需受支援編碼字集 ID 及機器編碼的詳細資料,請參閱 CodedCharSetIdEncoding
  • 佇列管理程式支援訊息格式的轉換。 如果與訊息相關聯的 MQMD 結構的 Format 欄位是其中一種內建格式,則佇列管理程式可以轉換訊息。 如果 Format 不是其中一種內建格式,您需要撰寫資料轉換結束程式來轉換訊息。

如果傳送端 MCA 要轉換資料,請在需要轉換之每一個傳送端或伺服器通道的定義上指定 CONVERT (YES) 關鍵字。 如果資料轉換失敗,則訊息會傳送至傳送端佇列管理程式上的 DLQ ,且 MQDLH 結構的 Feedback 欄位會指出原因。 如果無法將訊息放置在 DLQ 上,則通道會關閉,且未轉換的訊息會保留在傳輸佇列上。 在應用程式內而非在傳送 MCA 時進行資料轉換,可避免這種狀況。

一般而言,訊息中由內建格式或資料轉換結束程式說明為 字元 資料的資料會從訊息所使用的編碼字集轉換為所要求的編碼字集,且 數值 欄位會轉換為所要求的編碼。

如需轉換內建格式時所使用轉換處理慣例的進一步詳細資料,以及撰寫您自己的資料轉換結束程式的相關資訊,請參閱 撰寫資料轉換結束程式。 如需語言支援表格及受支援機器編碼的相關資訊,另請參閱 國家語言機器編碼

EBCDIC 換行字元的轉換

如果您需要確保從 EBCDIC 平台傳送至 ASCII 的資料與您再次收到的資料相同,則必須控制 EBCDIC 換行字元的轉換。

您可以使用平台相依交換器來執行此動作,該交換器會強制 IBM® MQ 使用未修改的轉換表格,但您必須瞭解可能會導致的不一致行為。

發生問題的原因是 EBCDIC 換行字元未在平台或轉換表之間一致地轉換。 因此,如果資料顯示在 ASCII 平台上,則格式可能不正確。 例如,這會導致難以使用 RUNMQSC 從 ASCII 平台遠端管理 IBM i 系統。

如需將 EBCDIC 格式資料轉換成 ASCII 格式的進一步相關資訊,請參閱 資料轉換