2

JavaからにメッセージWebsphere MQを送信できますAS400。からメッセージを送信する場合、完全な言語ローカリゼーションを含むWinXP、アクセス可能なものを使用しても違いはありません。Locale英語にも問題はありませんLocale。正しくエンコードするために重要なのは、次のコード行だけです。

msgId.characterSet = 1208;

残念ながら、それは有効ではありません。からメッセージを受け取りたい場合には違いがありますMQ Queue

  • MQ QueueWindows OS(Language Packを含まない英語)からメッセージを受け取った場合MQ QueueStringフォームからメッセージを受け取ることができます。

  • 一部のLanguagePackでWindowsOSが完全にローカライズされている場合、例外が発生します

メッセージバッファ中に例外が発生しました:
    java.io.UnsupportedEncodingException:Cp870

コードから(try-catch-finallyブロックからbalastを削除)

try {
    Class.forName("com.ibm.mq.MQEnvironment");
    MQEnvironment.hostname = hostname;
    MQEnvironment.port = port1;
    MQEnvironment.channel = channel;
    MQEnvironment.userID = userID;
    MQEnvironment.properties.put(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES);
    try {
        qmgr1 = new MQQueueManager(qmanager);
        MQGetMessageOptions gmo = new MQGetMessageOptions();
        int openOptions2 = MQC.MQOO_INPUT_SHARED;
        gmo.options = MQC.MQGMO_NO_SYNCPOINT; //Set no sync point
        gmo.options = MQC.MQGMO_CONVERT; //Handles ASCII/EBCDIC
        gmo.options = MQC.MQGMO_WAIT; //Wait until message arrives
        gmo.waitInterval = 3000;
        getq = qmgr1.accessQueue(responseQueue, openOptions2);
        while (true) {
            try {
                responseFromQUEUE = "";
                MQMessage msgId = new MQMessage();
                //putmsg.characterSet = 437;// Set code page to ASCII
                //putmsg.characterSet = 1200;// Set code page to UNICODE
                msgId.characterSet = 1208;
                getq.get(msgId, gmo);
                String str = msgId.readLine();
                //responseFromQUEUE = CpConv.tf870to1250(msgId.readLine());
                //own EncodePage doesn't works too
                if (responseFromQUEUE.length() == 0) {
                    break;
                }
            } catch (MQException mqx) {
                if (mqx.reasonCode == EMPTY_QUEUE) {
                } else {
                }
            }
        }
    } catch (MQException mqx) {
    } finally {
    }
} catch (IOException ex) {
} catch (ClassNotFoundException e) {
}

お願いします

  • いくつかのパラメータがありますかStringMQMessage#readLine()

  • ここでの私の質問は、String変換についてのみです。

  • Encodeからの問題はありませんMQMessage#getBytes

4

2 に答える 2

2

CP870は、EBCDICホストコードページです。例外が発生したときにWindowsをどのロケールに変更しますか?msgId.characterSet = 1208;ローカルを変更した後も使用しますか?Javaライブラリは、CP870にある着信メッセージを現在のロケールに変換できないようです。

ロケールを変更するときのWindowsコードページを確認し、1208がmsgId.characterSetに対して正しいかどうかを確認します。

于 2012-06-17T14:46:28.457 に答える
2
 gmo.options = MQC.MQGMO_NO_SYNCPOINT; //Set no sync point
 gmo.options = MQC.MQGMO_CONVERT; //Handles ASCII/EBCDIC
 gmo.options = MQC.MQGMO_WAIT; //Wait until message arrives

このコードは間違っています、あなたはオプションを上書きしています、あなたは|それらを必要としています。

于 2012-06-17T14:58:18.090 に答える