在使用 activemq-js(通常指 activemq-client 或基于 STOMP 协议的 JS 客户端)时遇到乱码问题,通常是因为字符编码不一致导致的,ActiveMQ 默认使用 UTF-8 编码,但如果客户端、消息体或浏览器环境没有正确设置编码,就会出现乱码。
以下是常见原因及解决方案:
✅ 1. 确保发送和接收都使用 UTF-8 编码
发送消息时:
const client = Stomp.client('tcp://localhost:61613');
client.connect('admin', 'admin', () => {
// 发送中文消息
client.send('/queue/test', { 'content-type': 'text/plain; charset=UTF-8' }, '你好,世界!');
}); 接收消息时:
client.subscribe('/queue/test', (message) => {
// 确保以 UTF-8 解码
const body = message.body; // STOMP 库默认按 UTF-8 解码
console.log('Received:', body);
}); ⚠️ 注意:不同 STOMP 库对
charset 的处理可能不同,建议显式指定
content-type。
✅ 2. 检查 STOMP 客户端库的编码配置
如果你使用的是 stompjs 库(目前更推荐的 ActiveMQ JS 客户端):
npm install @stomp/stompjs
import { Client } from '@stomp/stompjs';
const client = new Client({
brokerURL: 'ws://localhost:61614/stomp', // 使用 WebSocket + STOMP
connectHeaders: {
login: 'admin',
passcode: 'admin'
},
onConnect: () => {
client.publish({
destination: '/queue/test',
body: '你好,世界!',
headers: {
'content-type': 'text/plain; charset=UTF-8'
}
});
},
onStompError: (frame) => {
console.error('Broker reported error: ' + frame.headers['message']);
console.error('Additional details: ' + frame.body);
}
});
client.activate(); ✅ 3. 浏览器/Node.js 环境编码问题

浏览器环境:确保 HTML 页面声明了 UTF-8:
<meta charset="UTF-8">
Node.js 环境:确保脚本文件保存为 UTF-8 编码,并在终端中设置正确的 locale:
export LANG=en_US.UTF-8 export LC_ALL=en_US.UTF-8
✅ 4. ActiveMQ 服务端配置
检查 ActiveMQ 的 activemq.xml 或 jetty.xml,确保 WebSocket/STOMP 连接器支持 UTF-8:
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613"/> <transportConnector name="stomp+ws" uri="stomp+ws://0.0.0.0:61614"/>
如果使用嵌入式 ActiveMQ,确保初始化时没有覆盖编码设置。
✅ 5. 调试技巧
查看原始消息字节:
console.log(new TextEncoder().encode('你好,世界!'));手动解码:
const decoder = new TextDecoder('utf-8'); console.log(decoder.decode(message.body));使用 Wireshark 或 ActiveMQ Web Console 查看实际发送的字节流,确认是否是编码问题。

| 问题来源 | 解决方案 |
|---|---|
| 发送端编码 | 显式设置 content-type: text/plain; charset=UTF-8 |
| 接收端解码 | 确保 STOMP 库使用 UTF-8 解码 |
| 浏览器环境 | 添加 <meta charset="UTF-8"> |
| Node.js 环境 | 设置 LANG 和 LC_ALL 为 UTF-8 |
| ActiveMQ 配置 | 确保连接器支持 UTF-8 |
如果你能提供具体的代码片段和使用的库(如 stompjs、activemq-client 等),我可以给出更精确的解决方案。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

发表回复