IBM MQ получает сообщение с французскими символами - PullRequest
0 голосов
/ 16 января 2020

Как можно расшифровать сообщение с французскими символами? Пример сообщения в MQ:

  "name":" ĄĆĘŁŃÓŚŹŻąćęłńóśźżƵƶÁáÂâÃãÀàÇçÉéÊêÍíÓóÔôÕõÚúÀÉÈÍÏÓÒÚÜÇ",
  "id":"2463"

Когда я получаю сообщение от MQ, появляется:

"name":" ",
"id":"2463"

Поле «имя» выглядит так: enter image description here

Код, который я использую:

    public static String getMessage() throws JMSException {
            String message = null;
            try {
                MQQueueConnectionFactory cf = new MQQueueConnectionFactory();
                MQGetMessageOptions gmo = new MQGetMessageOptions();
                gmo.options = MQGMO_ALL_MSGS_AVAILABLE | MQGMO_WAIT | MQGMO_PROPERTIES_AS_Q_DEF | MQGMO_FAIL_IF_QUIESCING | MQOO_INPUT_AS_Q_DEF | MQGMO_SYNCPOINT
                         | MQC.MQGMO_CONVERT;;
                cf.setHostName(HOST);
                cf.setChannel(CHANNEL);
                cf.setPort(PORT);
                cf.setQueueManager(QMN);
                cf.setTransportType(WMQConstants.WMQ_CM_CLIENT);


                MQQueueConnection connection = (MQQueueConnection) cf.createQueueConnection();
                MQQueueSession session = (MQQueueSession) connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
                MQQueue queue = (MQQueue) session.createQueue(QUEUE_NAME);


                MQQueueReceiver receiver = (MQQueueReceiver) session.createReceiver(queue);


                connection.start();
                TextMessage receivedMessage = (TextMessage) receiver.receive();
                            byte[] bytes = receivedMessage.getText().getBytes("UTF-8");
                String s = new String(bytes, "UTF-8");

1 Ответ

0 голосов
/ 16 января 2020

Если сообщение является экземпляром TextMessage, оно будет содержать строку, соответствующую UTF-16, а не байтовый массив.

Тем не менее, вы должны добавить некоторые защитные логи c, чтобы убедиться:

        Message receivedMessage = receiver.receive();
        if (receivedMessage instanceof TextMessage) {
            TextMessage textMessage = (TextMessage) receivedMessage;
            try {
                String text = textMessage.getText();
                ...
            } catch (JMSException jmsex) {
                ...
            }
        } else {
        // Not a TextMessage, maybe its a JMSBytesMessage, let's check 
           ...
        }

Это, конечно, при условии, что ваше приложение-производитель генерирует текстовые сообщения. Так что, если это приложение JMS, оно должно выглядеть примерно так:

        Destination destination = context.createQueue("queue:///" + QUEUE_NAME);

        JMSProducer producer = context.createProducer();
        logger.info("producer created");

        TextMessage message = context.createTextMessage("
L'hôpital est près de l'hôtel");

        producer.send(destination, message);

...