Подтвердить что ты не робот

UTF-8 для EBCDIC в Java

Наше требование - отправить текст EBCDIC на мэйнфрейм. У нас есть некоторые китайские символы, таким образом, формат UTF8. Итак, есть ли способ конвертировать символы UTF-8 в EBCDIC?

Спасибо, Радж Мохан

4b9b3361

Ответ 1

Предполагая, что ваша целевая система является мэйнфреймом или средним регистром IBM, она полностью поддерживает все кодировки EBCDIC, встроенные в нее JVM в виде кодировок CPxxxx, соответствующих CCSID IBM (CP обозначает кодовую страницу). Вам нужно будет делать переводы на стороне хоста, поскольку клиентская сторона не будет иметь необходимой поддержки кодирования.

Поскольку Unicode является DBCS и выше и поддерживает каждый известный символ, вы, вероятно, будете нацелены на несколько кодировок EBCDIC; поэтому вы, вероятно, настроите эти кодировки каким-то образом. Попробуйте использовать только клиентские Unicode (UTF-8, UTF-16 и т.д.), При этом переводы выполняются по мере поступления данных на хост и/или покидают хост-систему.

Помимо необходимости делать переводы на стороне хоста, механика такая же, как и любой перевод на Java; например новые строки (байты, кодирование) и String.getBytes(кодирование), а также различные классы NIO и writer. На самом деле нет никакой магии - это ничем не отличается от перевода между, скажем, ISO 8859-x и Unicode, или любым другим SBCS (или ограниченным DBCS).

Например:

byte[] ebcdta="Hello World".getBytes("CP037");  // get bytes for EBCDIC codepage 37

Дополнительную информацию о веб-сайте документации IBM.

Ответ 2

EBCDIC имеет много 8-битных кодовых страниц. Многие из них поддерживаются виртуальной машиной. Взгляните на Charset.availableCharsets().keySet(), страницы EBCDIC называются IBM... (для IBM500 есть псевдонимы, такие как cp500, как вы можете видеть по Charset.forName("IBM500").aliases()).

Есть две проблемы:

  • Если у вас есть символы, включенные в разные кодовые страницы EBCDIC, это не поможет.
  • Я не уверен, если эти кодировки доступны в любом vm вне окон.

Для первого взгляните на этот подход. Для второго попробуйте установить желаемое время выполнения; -)

Ответ 3

Вы всегда можете использовать IBM Toolbox для Java (JTOpen), в частности класс com.ibm.as400.access.AS400Text в jt400.jar.

Это выглядит следующим образом:

int codePageNumber = 420;
String codePage = "CP420";
String sourceUtfText = "أحمد يوسف صالح";

AS400Text converter = new AS400Text(sourceUtfText.length(), codePageNumber);
byte[] bytesData = converter.toBytes(sourceUtfText);
String resultedEbcdicText = new String(bytesData, codePage);

Я использовал кодовую страницу 420 и соответствующее ей java-представление кодировки CP420, эта кодовая страница используется для арабского текста, поэтому вы должны выбрать подходящая кодовая страница для китайского текста.

Ответ 4

Для среднего уровня AS/400 (IBM я в наши дни) лучше всего использовать IBM Java Toolkit (jt400.jar), который делает все эти вещи прозрачно (возможно, слегка намекнул).

Обратите внимание, что внутри Java символ имеет 16-битное значение, а не UTF-8 (это кодировка).