2013-04-03 40 views
0

我的系统从Websphere MQ它来自Mainframe队列中读取数据,该应用程序读取的数据是EBCDIC格式 -数据转换和编码CP037

这是工作的罚款早些时候,我们搬到了今年早些时候JDK1.6(不知道这是否会导致此问题)。

我得到一个变量值为40,这是EBCDIC表示的“”,但这并没有变得隐蔽。

所以问题是MQ或大型机应该负责这种转换?因为我们正在做转换下面,但这是行不通的 -

     UnicodeFormat = "CP037"; 
         byte[] b; 
         b = UninterpretedRowdata.getBytes("Cp037"); 
         //System.out.println("DEST CP : "+UnicodeFormat); 
         UnicodedRow = new String(b, UnicodeFormat); 

在此先感谢。

+0

此帖实际上是在它被标记为重复的之前制作的;该帖子已在此迁移。我删除了那一个;请不要将其作为该副本的副本关闭。谢谢! –

回答

2

我不知道为什么在这个世界上你会想自己做转换。奇怪的。 MQ为你做转换要好得多。即RTM http://publib.boulder.ibm.com/infocenter/wmqv7/v7r1/topic/com.ibm.mq.doc/zd00050_.htm

对于MQ做转换需要两两件事:

1)消息需要MD.Format字段设置为MQC.MQFMT_STRING

2)你发出一个MQGET API调用与转换

MQGetMessageOptions gmo = new MQGetMessageOptions(); 
gmo.options = MQC.MQGMO_FAIL_IF_QUIESCING + MQC.MQGMO_CONVERT; 
MQMessage receiveMsg = new MQMessage(); 
inQ.get(receiveMsg, gmo); 
+0

感谢您检查这...我们在这里使用JMS ..将在JMS中检查相同的设置。希望有所帮助。 – AmitN

0

我写了下面的代码转换编码:

public class Converter{ 

    public static void main(String[] args) { 

     Charset charsetEBCDIC = Charset.forName("CP037"); 
     Charset charsetACSII = Charset.forName("US-ASCII"); 

     String ebcdic = "((((((("; 
     System.out.println("String EBCDIC: " + ebcdic); 
     System.out.println("String converted to ASCII: " + convertTO(ebcdic, charsetEBCDIC, charsetACSII)); 

     String ascII = "MMMMMM"; 
     System.out.println("String ASCII: " + ascII); 
     System.out.println("String converted to EBCDIC: " + convertTO(ascII, charsetACSII, charsetEBCDIC)); 
    } 

    public static String convertTO(String dados, Charset encondingFrom, Charset encondingTo) { 
     return new String(dados.getBytes(encondingFrom), encondingTo); 
    } 
}