diff --git a/confluent_common/confluent/tlvdata.py b/confluent_common/confluent/tlvdata.py
index c67453cd..4da3ae38 100644
--- a/confluent_common/confluent/tlvdata.py
+++ b/confluent_common/confluent/tlvdata.py
@@ -20,20 +20,36 @@ import json
 import struct
 
 
+def unicode_dictvalues(dictdata):
+    for key in dictdata:
+        if isinstance(dictdata[key], str):
+            dictdata[key] = dictdata[key].decode('utf-8')
+        elif isinstance(dictdata[key], list):
+            for i in xrange(len(dictdata[key])):
+                if isinstance(dictdata[key][i], str):
+                    dictdata[key][i] = dictdata[key][i].decode('utf-8')
+                elif isinstance(dictdata[key][i], dict):
+                    unicode_dictvalues(dictdata[key][i])
+        elif isinstance(dictdata[key], dict):
+            unicode_dictvalues(dictdata[key])
+
+
 def send(handle, data):
     if isinstance(data, str):
         # plain text, e.g. console data
         tl = len(data)
         if tl < 16777216:
-            #type for string is '0', so we don't need
-            #to xor anything in
+            # type for string is '0', so we don't need
+            # to xor anything in
             handle.sendall(struct.pack("!I", tl))
         else:
             raise Exception("String data length exceeds protocol")
         handle.sendall(data)
     elif isinstance(data, dict):  # JSON currently only goes to 4 bytes
         # Some structured message, like what would be seen in http responses
+        unicode_dictvalues(data)  # make everything unicode, assuming UTF-8
         sdata = json.dumps(data, ensure_ascii=False, separators=(',', ':'))
+        sdata = sdata.encode('utf-8')
         tl = len(sdata)
         if tl > 16777215:
             raise Exception("JSON data exceeds protocol limits")
diff --git a/confluent_server/confluent/httpapi.py b/confluent_server/confluent/httpapi.py
index bc5e899c..7e103c27 100644
--- a/confluent_server/confluent/httpapi.py
+++ b/confluent_server/confluent/httpapi.py
@@ -25,6 +25,7 @@ import confluent.exceptions as exc
 import confluent.log as log
 import confluent.messages
 import confluent.core as pluginapi
+import confluent.tlvdata as tlvdata
 import confluent.util as util
 import copy
 import eventlet
@@ -500,7 +501,9 @@ def _assemble_json(responses, resource, url, extension):
                 else:
                     rspdata[dk] = rsp[dk]
     rspdata["_links"] = links
-    yield json.dumps(rspdata, sort_keys=True, indent=4, ensure_ascii=False)
+    tlvdata.unicode_dictvalues(rspdata)
+    yield json.dumps(
+        rspdata, sort_keys=True, indent=4, ensure_ascii=False).encode('utf-8')
 
 
 def serve():