Tengo un archivo plano que se extrae de una tabla Db2, el archivo plano contiene registros tanto en formato char como en formato decimal empaquetado. Cómo convertir los datos empaquetados a una cadena Java. ¿Hay alguna forma de convertir todo el archivo plano en formato ASCII.convertir la cadena EBCDIC al formato ASCII?
Respuesta
Lea el archivo como una Cadena, escríbalo como EBCDIC. Use OutputStreamWriter y InputStreamWriter y proporcione la codificación en el constructor.
EBCDIC es una familia de codificaciones. Necesitará saber más en detalle qué codificación EBCDIC está buscando.
Java tiene una serie de supported encodings, incluyendo:
- IBM500/CP500 - 500V1 EBCDIC
- x-IBM834/Cp834 - IBM EBCDIC DBCS única coreana (doble byte)
- IBM1047/Cp1047 - Conjunto de caracteres Latin-1 para hosts EBCDIC
Pruébalos y mira lo que obtienes. Algo como:
InputStreamReader rdr = new InputStreamReader(new FileInputStream(<your file>), java.nio.Charset.forName("ibm500"));
while((String line = rdr.readLine()) != null) {
System.out.println(line);
}
Siguiendo de PAP, CP037 es la codificación EBCDIC de EE. UU.
También eche un vistazo a JRecord Proyecto. Le permite leer un archivo con una descripción Cobol o Xml y manejará EBCDIC y Comp-3.
Finalmente aquí es una rutina para convertir bytes decimales empaquetados en cadena véase el método getMainframePackedDecimal en Conversion
compartir un código de ejemplo por mí para su referencia:
package mypackage;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
public class EtoA {
public static void main(String[] args) throws UnsupportedEncodingException {
System.out.println("########");
String edata = "/ÂÄÀ"; //Some EBCDIC string ==> here the OP can provide the content of flat file which the OP pulled from DB2 table
System.out.println("ebcdic source to ascii:");
System.out.println("ebcdic: " + edata);
String ebcdic_encoding = "IBM-1047"; //Setting the encoding in which the source was encoded
byte[] result = edata.getBytes(ebcdic_encoding); //Getting the raw bytes of the EBCDIC string by mentioning its encoding
String output = asHex(result); //Converting the raw bytes into hexadecimal format
byte[] b = new BigInteger(output, 16).toByteArray(); //Now its easy to convert it into another byte array (mentioning that this is of base16 since it is hexadecimal)
String ascii = new String(b, "ISO-8859-1"); //Now convert the modified byte array to normal ASCII string using its encoding "ISO-8859-1"
System.out.println("ascii: " + ascii); //This is the ASCII string which we can use universally in JAVA or wherever
//Inter conversions of similar type (ASCII to EBCDIC) are given below:
System.out.println("########");
String adata = "abcd";
System.out.println("ascii source to ebcdic:");
System.out.println("ascii: " + adata);
String ascii_encoding = "ISO-8859-1";
byte[] res = adata.getBytes(ascii_encoding);
String out = asHex(res);
byte[] bytebuff = new BigInteger(out, 16).toByteArray();
String ebcdic = new String(bytebuff, "IBM-1047");
System.out.println("ebcdic: " + ebcdic);
//Converting from hexadecimal string to EBCDIC if needed
System.out.println("########");
System.out.println("hexcode to ebcdic");
String hexinput = "81828384"; //Hexadecimal which we are converting to EBCDIC
System.out.println("hexinput: " + hexinput);
byte[] buffer = new BigInteger(hexinput, 16).toByteArray();
String eout = new String(buffer, "IBM-1047");
System.out.println("ebcdic out:" + eout);
//Converting from hexadecimal string to ASCII if needed
System.out.println("########");
System.out.println("hexcode to ascii");
String hexin = "61626364";
System.out.println("hexin: " + hexin);
byte[] buff = new BigInteger(hexin, 16).toByteArray();
String asciiout = new String(buff, "ISO-8859-1");
System.out.println("ascii out:" + asciiout);
}
//This asHex method converts the given byte array to a String of Hexadecimal equivalent
public static String asHex(byte[] buf) {
char[] HEX_CHARS = "abcdef".toCharArray();
char[] chars = new char[2 * buf.length];
for (int i = 0; i < buf.length; ++i) {
chars[2 * i] = HEX_CHARS[(buf[i] & 0xF0) >>> 4];
chars[2 * i + 1] = HEX_CHARS[buf[i] & 0x0F];
}
return new String(chars);
}
}
Creo que sería más útil para el OP y otros visitantes, cuando agregue alguna explicación a su intención. – reporter
- 1. ¿Convertir cadena de ASCII a EBCDIC en Java?
- 2. Cómo convertir de EBCDIC a ASCII en C# .net
- 3. ¿Convertir de cadena ASCII codificada en hexadecimal a ASCII simple?
- 4. Convertir una cadena Unicode en una cadena ASCII de escape
- 5. ¿Cómo convertir IDN a ASCII?
- 6. Convertir una cadena de hexadecimal en ASCII en Java
- 7. UTF-8 a EBCDIC en Java
- 8. ¿Convertir ascii a int?
- 9. Python regex para convertir caracteres no ascii en una cadena a los equivalentes ascii más cercanos
- 10. bash ascii al hex
- 11. ¿Cómo convertir una cadena a ascii en binario en C#?
- 12. Necesidad de convertir cadena/char a valores de ascii
- 13. convertir cadena en formato java.util.date en java
- 14. fecha sql convertir a formato de cadena
- 15. Convertir cadena a decimal con formato
- 16. Ascii/Hex convertir en bash
- 17. Convertir ASCII de la codificación UTF-8
- 18. Convertir caracteres no ASCII de ASCII-8BIT a UTF-8
- 19. Convertir bytes ASCII [] a String
- 20. rieles convertir cadena al número
- 21. cómo convertir ascii a unsigned int
- 22. Convertir de formato largo a formato
- 23. Convertir cadena al campo numérico
- 24. Cómo convertir .NET cadena de formato estándar a cadena de formato de Excel
- 25. Conversión de cadena binaria a ASCII correspondiente
- 26. Desempaquetado de decimales empaquetados EBCDIC (COMP-3) en una conversión ASCII
- 27. ¿Cómo puedo convertir Ascii extendido a System.String?
- 28. Reemplazar caracteres no ASCII de la cadena
- 29. Convertir Unicode en ASCII sin cambiar la longitud de la cadena (en Java)
- 30. Cómo convertir el formato MetaStock a CSV?
Hay que señalar que esta la lista es de las codificaciones admitidas por * Oracle JDK *. La lista de codificaciones [debe ser compatible con ** todas las JVM ** es mucho más corta] (http://download.oracle.com/javase/7/docs/api/java/nio/charset/Charset.html#standard) –
¡Muy buen punto! – pap