`
witcheryne
  • 浏览: 1093899 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

解决ActiveMQ中,Java与C++交互中文乱码问题

阅读更多

        最近在尝试使用ActiveMQ做系统间的继承,当然少不了Java和C++客户端的交互问题。由于Java与C++在字符串上采用了不同方式的编码(Java-Unicode, C++ - ascii)造成了文本数据传输过程中的编码问题, 下面记录一下解决方

环境:

C++ 端:

操作系统:         Win7

JMS客户端:     CMS 3.1.2 (新版本的CMS需要VS2008编译)

开发环境:         VS2005

 

          Java端:

                   操作系统:          WinXp

                   JMS客户端:       ActiveMQ5.4.1-Core

                   开发环境:           JDK1.6.22

 

          ActiveMQ:

                   ActiveMQ 5.4.1


解决方法:

        根据JMS API对Message类别的定义,最适合多语言见交互的Message类型应该是BytesMessage和TextMessage。由于BytesMessage的readUTF方法在CMS3.1.2中,接收Java端发出的UTF字符时会抛出异常,导致BytesMessage不好使用;

        TextMessage中,无论C++端以哪种格式的数据setText() , Java端接收到的数据都是以ISO-8859-1 格式编码的字符。所以统一在发送和接收时都采用 ISO-8859-1 的方式进行数据传输

 

发送时的代码:

 

	private void writeTextMessage(String txt) {
		try {
			String msg = txt;		
						
			String iso = new String(txt.getBytes("GBK"), "ISO-8859-1");
			
			TextMessage message = pubSession.createTextMessage();
			message.setStringProperty("language", "java");
			message.setText(iso);
			
			pub.publish(message);
			
		} catch (JMSException e) {
			e.printStackTrace();
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		} 
	}

 

             接收时的代码:

 

	private void onTextMessage(TextMessage message) throws JMSException {
		String txt = message.getText();
		
		try {
			String gbk = new String(txt.getBytes("ISO-8859-1"), "GBK");
			System.out.println(gbk);
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
	}
 

 

Update1: 2011-07-26 10:00

CMS版本不是1.0版,应该是3.1.2

0
1
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    在Java与C++间应用Activemq

    RetailSystem包含消息生产者Producer,BankSystem包含消息接收者Consumer和Java调用C++的中间类DLL,dll3为Java方法在C++下的实现.

    activeMQ的java简单实例.zip

    activeMQ的java简单实例.zipactiveMQ的java简单实例.zip

    java操作activeMQ(java项目代码及jar包可运行,队列和订阅模式)

    java操作activeMQ(java项目代码及jar包可运行,队列和订阅模式)

    ActiveMQ之C++与C#通信

    使用ActiveMQ由C++控制台程序发送消息,C#控制台程序接收消息。

    ActiveMQ 5 java 源码

    ActiveMQ 5 java 源码 直接从svn checkout 下来的代码。

    测试activeMQ的java程序

    activeMQ是jms的一种,是java是实现两个系统之间交互的方式,MQ分为队列模式和订阅模式,对这两种模式分别进行了测试通过。

    activeMQ示例 activeMQ demo,java分布式技术

    本示例中,使用maven管理,完美解决各种依赖问题,不需要自行配置,导入项目等待eclipse自行下载jar包后即可; 请将本maven项目引入你自己的maven项目中(在你自己的pom.xml文件中配置这个项目的gourp和id以及版本号)...

    ActiveMQ基于Java和JavaScript的应用实例

    ActiveMQ基于Java和JavaScript的应用实例 改造ActiveMQ官方例子,用Java和JavaScript实现实时监听,收发消息

    ActiveMQ-Java P2P模式MQ实战

    消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过队列来通信。队列的使用除去了接收和发送应用程序同时执行...

    activeMQ的java简单实例

    对ActiveMQ的两种消息模式用java进行了一个简单实现。

    ActiveMQ JAVA简单项目案例

    ActiveMQ 是Apache出品,最流行的,能力...本压缩包是是实现ActiveMQ中点对点与发布订阅模式的java项目,下载后可配合运行好的ActiveMQ服务直接运行。 没有ActiveMQ服务的可下载本人的ActiveMQ消息中间件,运行即可。

    memcached和activeMQ的JAVA示例代码

    memcached 和 activeMQ 的入门级示例代码,JAVA eclipse工程

    activeMQ 服务端客户端 java代码

    activeMQ 服务端客户端 java代码 activeMQ 服务端客户端 java代码

    java中间件之activemq

    ActiveMQ 是由 Apache 出品的一款开源消息中间件,旨在为应用程序提供高效、可扩展、稳定、安全的企业级消息通信。它的设计目标是提供标准的、面向消息的、多语言的应用集成消息通信中间件。ActiveMQ 实现了 JMS 1.1...

    zis.rar_active MQ_activemq_java activeMQ_java 转发

    利用activeMq实现的消息数据转发服务器端实现

    ActiveMQ完整的C++源码

    包括ActiveMQ、CPPUnit、APR、APR-iconv、APR-util四个编译ActiveMQ必须的包,省得一个一个去下载了。 开发具体例子参考下面的链接 http://blog.sina.com.cn/s/blog_a459dcf501017ooh.html 配置和简单的例子参考下面...

    ActiveMQ_in_Action_中文

    ActiveMQ_in_Action_中文ActiveMQ_in_Action_中文ActiveMQ_in_Action_中文ActiveMQ_in_Action_中文

    ActiveMQ——Java连接ActiveMQ

    发布/订阅消息传递域的特点如下:(1)生产者将消息发布到topic中,每个消息可以有多个消费者,属于1:N关系(2)生产者和消费者之间有时间上的相关性,订阅某一个主题的消费者只能消费自它订阅之后发布的消息(3)...

    ActiveMQ与Spring线程池整合实例

    ActiveMQ与Spring线程池整合的一个实例。 lib库没有上传。 对于实例的讲解,在竹子的论坛有我对这个实例的帖子(http://www.java2000.net/viewthread.jsp?tid=1167) lib中包含: apache-activemq-4.1.1.jar ...

    ActiveMQ的安装与使用

    ActiveMQ的安装与使用ActiveMQ的安装与使用ActiveMQ的安装与使用

Global site tag (gtag.js) - Google Analytics