應用程式資料轉換
必要時, MCA 會將訊息描述子及標頭資料轉換為必要的字集及編碼。 鏈結的任一端 (即本端 MCA 或遠端 MCA) 可以執行轉換。
當應用程式將訊息放入佇列時,本端佇列管理程式會將控制資訊新增至訊息描述子,以協助在佇列管理程式及 MCA 處理訊息時對訊息進行控制。 視環境而定,會在本端系統的字集及編碼中建立訊息標頭資料欄位。
當您在系統之間移動訊息時,有時需要將應用程式資料轉換成接收系統所需的字集及編碼。 可以從接收系統上的應用程式內,或由傳送系統上的 MCA 來執行此動作。 如果在接收系統上支援資料轉換,請使用應用程式來轉換應用程式資料,而不是根據傳送系統上已發生的轉換而定。
Options 欄位中指定 MQGMO_CONVERT 選項時,以及當 所有 下列陳述式都成立時,會在應用程式內轉換應用程式資料:- 與佇列上訊息相關聯的 MQMD 結構中設定的
CodedCharSetId或Encoding欄位與 MQGET 呼叫中指定的 MQMD 結構中設定的CodedCharSetId或Encoding欄位不同。 - 與訊息相關聯的 MQMD 結構中的
Format欄位不是 MQFMT_NONE。 - MQGET 呼叫中指定的
BufferLength不是零。 - 訊息資料長度不是零。
- 佇列管理程式支援在與訊息及 MQGET 呼叫相關聯的 MQMD 結構中指定的
CodedCharSetId與Encoding欄位之間進行轉換。 如需受支援編碼字集 ID 及機器編碼的詳細資料,請參閱 CodedCharSetId 及 Encoding 。 - 佇列管理程式支援訊息格式的轉換。 如果與訊息相關聯的 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 格式的進一步相關資訊,請參閱 資料轉換 。