UTF-8 к EBCDIC в Java

Попробуйте это:

 Select 
 A
 from #tmp
 group by A 
 Having 
 count(*)=count(case when c=0 then 0 else null end)
13
задан Wayne Koorts 21 April 2009 в 07:24
поделиться

4 ответа

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

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

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

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

5
ответ дан 1 December 2019 в 23:32
поделиться

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

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

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

Например:

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

Вы можете найти больше информации в IBM веб-сайт документации .

9
ответ дан 1 December 2019 в 23:32
поделиться

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

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

0
ответ дан 1 December 2019 в 23:32
поделиться

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

4
ответ дан 1 December 2019 в 23:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: