我从大型机MQ接收字节[]。这个bytes []我试图转换为EBCDIC字符串。我使用以下和系统只是挂起。可能是什么问题?
new String(mqmdAccountingToken,"Cp1047");
mqmdAccountingToken是从MQ接收的字节数组。我觉得我提供的Charset不正确。有没有办法识别要使用的正确字符集然后转换?
答案 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() + "'");