将 EBCDIC 字符串转换为 ASCII 格式?

发布于 2024-11-30 04:37:31 字数 102 浏览 1 评论 0原文

我有一个从 Db2 表中提取的平面文件,该平面文件包含字符格式和打包十进制格式的记录。如何将打包数据转换为 java 字符串。有什么方法可以转换整个数据吗?平面文件转换为 ASCII 格式。

I am having a flat file which is pulled from a Db2 table ,the flat file contains records in both the char format as well as packed decimal format.how to convert the packed data to a java string.is there any way to convert the entire flat file to ASCII format.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

满意归宿 2024-12-07 04:37:31

EBCDIC 是一个编码系列。您需要更详细地了解您所追求的 EBCDIC 编码。

Java 有许多支持的编码 ,包括:

  • IBM500/Cp500 - EBCDIC 500V1
  • x-IBM834/Cp834 - IBM EBCDIC DBCS-only 韩语(双字节)
  • IBM1047/Cp1047 - EBCDIC 主机的 Latin-1 字符集

尝试一下,看看会得到什么。像这样的东西:

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

EBCDIC is a family of encodings. You'll need to know more in details which EBCDIC encoding you're after.

Java has a number of supported encodings, including:

  • IBM500/Cp500 - EBCDIC 500V1
  • x-IBM834/Cp834 - IBM EBCDIC DBCS-only 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);
}
韵柒 2024-12-07 04:37:31

将文件读取为字符串,将其写入 EBCDIC。使用OutputStreamWriter和InputStreamWriter并在构造函数中给出编码。

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

別甾虛僞 2024-12-07 04:37:31

继 PAP 之后,CP037 是 US EBCDIC 编码。

另请查看 JRecord 项目。它允许您读取带有 Cobol 或 Xml 描述的文件,并将处理 EBCDIC 和 Comp-3。

最后,这是一个将打包十进制字节转换为字符串的例程,请参阅 转换

Following from PAP, CP037 is US EBCDIC encoding.

Also have a look at JRecord Project. It allows you to read a file with either a Cobol or Xml description and will handle EBCDIC and Comp-3.

Finally here is a routine to convert packed decimal bytes to String see method getMainframePackedDecimal in Conversion

澜川若宁 2024-12-07 04:37:31

分享我的示例代码供您参考:

    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);
}
}

Sharing a sample code by me for your 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);
}
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文