| Author | 
		  Message
		 | 
		
		  | RB | 
		  
		    
			  
				 Posted: Fri Dec 07, 2007 2:47 pm    Post subject: CCSID for Trademark | 
				     | 
			   
			 
		   | 
		
		
		   Acolyte
 
 Joined: 23 May 2006 Posts: 56
  
  | 
		  
		    
			  
				All,
 
 
I have a java program reading a file and writing it to the queue. The program is creating issues whenever the input message has special characters like trademark symbol.
 
 
I tried couple of options, but nothing seems to work. I am not sure whether it is the reading file part or the writing to the queue part affecting the byte stream. It looks like the output is always defaulted to UTF-8.
 
 
The sample code is as given below.
 
 
   
	| Code: | 
   
  
	
 
 
reading section-
 
-----------------
 
FileInputStream instr = new FileInputStream(files[i]);
 
            InputStreamReader instrR = new InputStreamReader(instr,"ISO-8859-1");
 
 
if (filelength > 0) {
 
                  StringBuffer sb = new StringBuffer();
 
                  char[] b = new char[BLOCK_SIZE];
 
                  int n;
 
 
                  // read a block, if it gets any chars, append them.
 
                  while ((n = instrR.read()) > 0) {
 
                     //sb.append(b, 0, n);
 
                     sb.append((char)n);
 
                  }
 
 
instrR.close();
 
writing section
 
----------------
 
 
Hashtable env = new Hashtable();
 
         env.put(Context.INITIAL_CONTEXT_FACTORY, initialContextFactory);
 
         env.put(Context.PROVIDER_URL, providerUrl);
 
 
         env.put("CCSID", new Integer(1208)); 
 
 
jndiContext = new InitialDirContext(env);
 
         // Get a QueueConnectionFactory.
 
         queueConnectionFactory = (QueueConnectionFactory) jndiContext.lookup(qcfName);
 
         // The Queue object from the JNDI namespace.
 
         queue = (Queue) jndiContext.lookup(sendQueueName);
 
         // Create a QueueConnection from the QueueConnectionFactory
 
         queueConnection = queueConnectionFactory.createQueueConnection();
 
         // Start the QueueConnection.
 
         queueConnection.start();
 
         // Create a QueueSession object from the QueueConnection
 
         queueSession = queueConnection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
 
         // Create a QueueSender object for sending messages from the queue session.
 
         queueSender = queueSession.createSender(queue);
 
         // Prepare a message object from the queuesession.we will create a textMessage message object.
 
         message = queueSession.createTextMessage();
 
         // Set the message you want,to the message object.
 
         message.setText(textmsg);
 
         // Now we are ready to send the message.
 
         try {
 
            queueSender.send(message);
 
            System.out.println("The Message has been sent ");
 
         } catch (JMSException je) {
 
            System.err.println("caught " + je);
 
            Exception e = je.getLinkedException();
 
            if (e != null) {
 
               System.err.println("linked exception: " + e);
 
            }
 
            System.out.println("The Message has not been sent ");
 
            return -1;
 
         }
 
 | 
   
 
 
 
The above code converts D©COR in the input to D©COR in the output. I would appreciate if anyone can tell what CCSID values I should be use in this pgm.
 
 
regards,
 
rb | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | fjb_saper | 
		  
		    
			  
				 Posted: Fri Dec 07, 2007 3:02 pm    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		    Grand High Poobah
 
 Joined: 18 Nov 2003 Posts: 20768 Location: LI,NY 
  | 
		  
		    
			  
				You can use CCSID 1208 (UTF-8 ).
 
You need to set the CCSID on the message
 
 
Enjoy   _________________ MQ & Broker admin | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | RB | 
		  
		    
			  
				 Posted: Fri Dec 07, 2007 4:06 pm    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Acolyte
 
 Joined: 23 May 2006 Posts: 56
  
  | 
		  
		    
			  
				Thanks for the reply.
 
 
But I am already using that in the code. I  think the reading part is not working correctly. Though I have specified "ISO-8859-1" while reading the file, it is not coming correctly.
 
 
When I display the content in between (string buffer sb), I can see the extra bytes. 
 
 
I am not sure whether this is the correct way or value to be used in the InputStreamReader. Any thoughts?
 
 
Regards,
 
RB | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | jefflowrey | 
		  
		    
			  
				 Posted: Fri Dec 07, 2007 4:23 pm    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Grand Poobah
 
 Joined: 16 Oct 2002 Posts: 19981
  
  | 
		  
		    
			  
				So you appear, at least to my very very very very very brief glance, to have created a TextMessage properly.
 
 
This has nothing to do with how you are reading the message.
 
 
Does the message apear as a TextMessage on the remote side?  Or something else? _________________ I am *not* the model of the modern major general. | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | RB | 
		  
		    
			  
				 Posted: Fri Dec 07, 2007 4:32 pm    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Acolyte
 
 Joined: 23 May 2006 Posts: 56
  
  | 
		  
		    
			  
				Yes, it is coming as a proper text message with an extra byte (Â). And I can see that the code page is set to 1208 in the MQMD header. Should I be using some other encoding value?? Or is the handling in between (chars to string buffer and back to string) somehow affecting the byte stream??
 
 
Regards,
 
RB | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | RB | 
		  
		    
			  
				 Posted: Fri Dec 07, 2007 4:35 pm    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Acolyte
 
 Joined: 23 May 2006 Posts: 56
  
  | 
		  
		    
			  
				| btw, I am running this in Unix, if at all that is going to make any diff!! | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | fjb_saper | 
		  
		    
			  
				 Posted: Sat Dec 08, 2007 4:40 pm    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		    Grand High Poobah
 
 Joined: 18 Nov 2003 Posts: 20768 Location: LI,NY 
  | 
		  
		    
			  
				
   
	| RB wrote: | 
   
  
	Thanks for the reply.
 
 
But I am already using that in the code. I  think the reading part is not working correctly. Though I have specified "ISO-8859-1" while reading the file, it is not coming correctly.
 
 
When I display the content in between (string buffer sb), I can see the extra bytes. 
 
 
I am not sure whether this is the correct way or value to be used in the InputStreamReader. Any thoughts?
 
 
Regards,
 
RB | 
   
 
 
ISO-8859-1 is CCSID 819. I am not sure that this CCSID will support all of your special characters. You're better off keeping it all in CCSID 1208 (UTF-8 ) and setting the CCSID on the message...
 
 
Enjoy     _________________ MQ & Broker admin | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | RB | 
		  
		    
			  
				 Posted: Mon Dec 10, 2007 2:58 pm    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		   Acolyte
 
 Joined: 23 May 2006 Posts: 56
  
  | 
		  
		    
			  
				Thanks guys for the reply.
 
 
I was not setting the CCSID correctly while putting the message. I was adding it as a property to the Hashtable, but that doesn't look like the right way.
 
Now I am setting it using the set int property on the message as given below.
 
 
   
	| Code: | 
   
  
	| msg.setIntProperty( "JMS_IBM_Character_Set", 819); | 
   
 
 
 
But again, when I am trying with CCSID value as 1208, it is not coming correctly. But with 819 I am able to retain the values correctly.
 
 
Thanks,
 
RB | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | fjb_saper | 
		  
		    
			  
				 Posted: Mon Dec 10, 2007 3:31 pm    Post subject:  | 
				     | 
			   
			 
		   | 
		
		
		    Grand High Poobah
 
 Joined: 18 Nov 2003 Posts: 20768 Location: LI,NY 
  | 
		  
		    
			  
				
   
	| RB wrote: | 
   
  
	Thanks guys for the reply.
 
 
I was not setting the CCSID correctly while putting the message. I was adding it as a property to the Hashtable, but that doesn't look like the right way.
 
Now I am setting it using the set int property on the message as given below.
 
 
   
	| Code: | 
   
  
	| msg.setIntProperty( "JMS_IBM_Character_Set", 819); | 
   
 
 
 
But again, when I am trying with CCSID value as 1208, it is not coming correctly. But with 819 I am able to retain the values correctly.
 
 
Thanks,
 
RB | 
   
 
 
This may well be because the text you are populating the message with is CCSID 819 and not UTF-8 ...   _________________ MQ & Broker admin | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | ling_71_99 | 
		  
		    
			  
				 Posted: Tue Dec 11, 2007 8:11 am    Post subject: Try to read into byte[] instead of StringBuffer | 
				     | 
			   
			 
		   | 
		
		
		    Novice
 
 Joined: 19 Nov 2007 Posts: 11 Location: Canada 
  | 
		  
		    
			  
				Try to read it into byte[] first, then convert to String the encoding you want as following:
 
 
			 encoding = "Cp437";  // the code page you want
 
 
			byte[] ebcdic = ....;
 
			String reconsituted = new String( ebcdic, encoding );
 
 
Regards,
 
Michael _________________ Mike | 
			   
			 
		   | 
		
		
		  | Back to top | 
		  
		  	
		   | 
		
		
		    | 
		
		
		  | 
		    
		   |