Convert EBCDIC String to ASCII format?

I have a flat file that is extracted from the Db2 table, the flat file contains entries in both char and packed decimal format. How to convert packed data to java.is string there is a way to convert the entire flat file to ASCII format.

+7
source share
4 answers

EBCDIC is a family of encodings. You will need to learn more about EBCDIC encoding.

Java has a number of supported encodings , including:

  • IBM500 / Cp500 - EBCDIC 500V1
  • x-IBM834 / Cp834 - IBM EBCDIC Only for DBCS Korean (double-byte)
  • IBM1047 / Cp1047 - Latin-1 character set for EBCDIC hosts.

Try those and see what you get. Something like:

InputStreamReader rdr = new InputStreamReader(new FileInputStream(<your file>), java.nio.Charset.forName("ibm500")); while((String line = rdr.readLine()) != null) { System.out.println(line); } 
+16
source

Read the file as a line, write it as EBCDIC. Use OutputStreamWriter and InputStreamWriter and give the encoding in the constructor.

+1
source

Following PAP, CP037 is US EBCDIC encoded.

Also see the JRecord Project. It allows you to read a Cobol or Xml description file and process EBCDIC and Comp-3.

Finally, this is a routine for converting packed decimal bytes to String, see the getMainframePackedDecimal method in Conversion p>

+1
source


Code sharing for me for reference:

  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 = "0123456789abcdef".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); } } 
-one
source

All Articles