У меня возникла интересная проблема (как это часто бывает при взаимодействии с устаревшими системами). Я работаю над приложением (которое в настоящее время работает в системе x86 Linux или Windows), которое может получать запросы от различных систем, одна из которых является системой MVS.Какую кодировку/кодировку следует использовать для интерпретации данных, поступающих из системы MVS в среду Java?
Я пытаюсь определить, какую кодировку/кодировку я должен использовать для интерпретации данных запроса, поступающих из системы MVS.
В прошлом я использовал «cp500» (IBM-500) для интерпретации даты байта для систем z/OS, однако я боюсь, что, поскольку MVS - это немного устаревшая система, и что, поскольку IBM показалась постоянно менять разум в отношении того, какую кодировку использовать (должны быть десятки кодировок EBCDIC), что cp500 не может быть правильной кодировкой.
Лучший ресурс, который я нашел на наборах символов в Java, составляет: http://mindprod.com/jgloss/encoding. Однако с этого сайта и IBM Infocenters я не смог получить четкий ответ.
EDIT: Добавлен из моего ответа на Pax ниже:
Был вопиющий дыра в моем вопросе в происхождении данных запроса. В этом случае происхождение данных осуществляется через интерфейс Websphere MQ. У Websphere MQ есть возможности для перевода в надлежащее кодирование, однако это только для чтения данных с использованием MQMessage.readString(), который с тех пор устарел. Я бы предпочел использовать это, однако я использую проприетарную инфраструктуру интерфейса, в которой я не могу изменить способ считывания сообщения с MQQueue, который считывает байты непосредственно из очереди и, таким образом, я оставил перевод дескриптора.
Итоговый ответ: Я хотел следить за этим. Оказывается, правильный набор символов действительно был cp500 (IBM-500). Однако у меня создается впечатление, что результаты могут отличаться. Некоторые советы для кого-то другого с той же проблемой:
Использовать Charset.availableCharsets() ;. Это даст вам карту поддерживаемых наборов символов во время выполнения. Я повторил эти множества и распечатал данные байта, переведенные в этот набор символов. Хотя он не дал мне ответа, который я хотел (главным образом потому, что я не мог читать данные по мере поступления), я думаю, что это может быть полезно для других.
Обратитесь к: http://mindprod.com/jgloss/encoding за список поддерживаемых наборов символов.
Наконец, хотя я не подтвердил это, но убедитесь, что вы используете правильную JRE. Я думаю, что IBM Runtimes поддерживает больше наборов символов EBCDIC, чем OpenJDK или Sun Runtimes.
Andrew, availableCharsets() расскажет вам, что вы можете обработать, но не укажет, какой из них вы должны использовать для определенного набора данных. Вам все равно нужно найти это, иначе ваше обращение будет возвращать мусор. Но вы правы в IBM JRE - у него есть дополнительные материалы для z/OS. – paxdiablo