Il nostro requisito è inviare testo EBCDIC al mainframe. Abbiamo alcuni caratteri cinesi quindi in formato UTF8. Quindi, c'è un modo per convertire i caratteri UTF-8 in EBCDIC?da UTF-8 a EBCDIC in Java
Grazie, Raj Mohan
Il nostro requisito è inviare testo EBCDIC al mainframe. Abbiamo alcuni caratteri cinesi quindi in formato UTF8. Quindi, c'è un modo per convertire i caratteri UTF-8 in EBCDIC?da UTF-8 a EBCDIC in Java
Grazie, Raj Mohan
Assumendo che il sistema di destinazione è un mainframe IBM o di fascia media, che ha il pieno supporto per tutte le codifiche EBCDIC integrate in essa la JVM come codifiche nome CPxxxx, corrispondente di IBM CCSID (CP sta per code-page). Dovrai eseguire le traduzioni sul lato host poiché il lato client non avrà il necessario supporto per la codifica.
Dato che Unicode è DBCS e superiore e supporta tutti i caratteri noti, è probabile che il targeting riguardi più codifiche EBCDIC; quindi probabilmente configurerai le codifiche in qualche modo. Cerca di avere il tuo client Unicode (UTF-8, UTF-16, ecc.) Solo, con le traduzioni eseguite mentre i dati arrivano sull'host e/o lasciano il sistema host.
Oltre a dover eseguire traduzioni host-side, i meccanismi sono gli stessi di qualsiasi traduzione Java; per esempio. nuova stringa (byte, codifica) e String.getBytes (codifica) e le varie classi NIO e writer. Non c'è davvero alcuna magia - non è diverso dal tradurre tra, ad esempio, ISO 8859-x e Unicode, o qualsiasi altro SBCS (o DBCS limitato).
Ad esempio:
byte[] ebcdta="Hello World".getBytes("CP037"); // get bytes for EBCDIC codepage 37
È possibile trovare ulteriori informazioni su IBM's documentation website.
EBCDIC ha molte pagine codici a 8 bit. Molti di questi sono supportati dalla VM. Date un'occhiata a Charset.availableCharsets().keySet()
, le pagine EBCDIC sono denominate IBM...
(ci sono alias come cp500
per IBM500
come potete vedere per Charset.forName("IBM500").aliases()
).
ci sono due problemi:
Per il primo, dare un'occhiata a this approach. Per il secondo, provate sul tempo di utilizzo desiderato ;-)
Non tutti i set di caratteri denominati 'IBM *' sono EBCDIC. Ad esempio, [IBM850] (http://en.wikipedia.org/wiki/Code_page_850) è la codepage standard utilizzata negli Stati Uniti e nelle versioni europee occidentali di Windows nel prompt dei comandi. – lavinio
Per il midrange AS/400 (IBM i in questi giorni) la soluzione migliore è utilizzare IBM Java Toolkit (jt400.jar) che fa tutto questo le cose in modo trasparente (forse leggermente accennato).
Si prega di notare che all'interno di Java un carattere è un valore a 16 bit, non un UTF-8 (cioè una codifica).
È sempre possibile utilizzare IBM Toolbox per Java (JTOpen), in particolare la classe com.ibm.as400.access.AS400Text
in jt400.jar.
Si va come segue:
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);
ho usato il code-page e la sua rappresentazione java corrispondente della codifica CP420, questo codice-pagina viene utilizzata per il testo in arabo, così, si dovrebbe scegliere la code page adatta per il testo cinese.
La conversione da UTF-8 a EBCDIC non ha perdite? Cioè, puoi trasformare avanti e indietro e ottenere sempre gli stessi byte EBCDIC ogni volta? –