@@ -1,6 +1,7 @@
 'use strict';
 var util = require('util');
 var fs = require('fs');
+var StringDecoder = require('string_decoder').StringDecoder;
 var _ = require('lodash');
 var Channel = require('./channel');
 var Exchange = require('./exchange');
@@ -117,6 +118,7 @@ Queue.prototype.subscribe = function (options, messageListener) {
 
   return this.subscribeRaw(rawOptions, function (m) {
     var contentType = m.contentType;
+    var decoder = new StringDecoder('utf8');
 
     if (contentType == null && m.headers && m.headers.properties) {
       contentType = m.headers.properties.content_type;
@@ -138,7 +140,7 @@ Queue.prototype.subscribe = function (options, messageListener) {
 
     m.addListener('data', function (d) {
       if (isJSON) {
-        buffer += d.toString();
+        buffer += decoder.write(d);
       } else {
         d.copy(buffer, buffer.used);
         buffer.used += d.length;
@@ -149,6 +151,7 @@ Queue.prototype.subscribe = function (options, messageListener) {
       var json, deliveryInfo = {}, msgProperties = classes[60].fields, i, l;
 
       if (isJSON) {
+        decoder.end();
         try {
           json = JSON.parse(buffer);
         } catch (e) {