从bytes []转换为EBCDIC字符串

时间:2014-06-11 10:07:18

标签: java string ibm-mq mainframe

我从大型机MQ接收字节[]。这个bytes []我试图转换为EBCDIC字符串。我使用以下和系统只是挂起。可能是什么问题?

new String(mqmdAccountingToken,"Cp1047");

mqmdAccountingToken是从MQ接收的字节数组。我觉得我提供的Charset不正确。有没有办法识别要使用的正确字符集然后转换?

3 个答案:

答案 0 :(得分:2)

MQMD AccountingToken字段由二进制值和队列管理器设置的字符值组成(默认行为),因此您需要将其视为二进制字段(即byte []字段)而不是字符字段。

如果您确实想将其转换为某些字符字段,请将其转换为十六进制显示字符。

答案 1 :(得分:1)

显然,早期对EBCDIC的一个主要批评是它的大量变种。您需要在程序之外确定您拥有的变体,并使用相应的字符集。事实上它来自“大型机”而MQ并不识别字符集。您可以看到可能的集合数at this IBM site

答案 2 :(得分:0)

以下是处理MQMD AccountingToken字段的方法 - 将其从二进制数据转换为十六进制显示字符。

StringBuffer sb = new StringBuffer();
String hex;
for (i=0; i < msg.accountingToken.length; i++)
{
   hex = Integer.toHexString((new Byte(msg.accountingToken[i])).intValue());

   if (hex.length() == 2)
      sb.append(hex);
   else if (hex.length() == 1)
      sb.append("0" + hex);
   else if (hex.length() > 2)
   {
      sb.append(hex.substring(hex.length()-2,hex.length()-1));
      sb.append(hex.substring(hex.length()-1,hex.length()));
   }
}
System.out.println(" AccountingToken: X'" + sb.toString().toUpperCase() + "'");