UTF-8 для EBCDIC на Java - PullRequest
       21

UTF-8 для EBCDIC на Java

13 голосов
/ 21 апреля 2009

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

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

Ответы [ 4 ]

9 голосов
/ 21 апреля 2009

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

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

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

Например:

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

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

5 голосов
/ 21 апреля 2009

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

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

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

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

4 голосов
/ 17 августа 2009

Вы всегда можете использовать IBM Toolbox for 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 , эта кодовая страница используется для арабского текста, поэтому вы должны выбрать подходящий код страница для китайского текста.

0 голосов
/ 21 апреля 2009

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

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

...