diff --git a/supwisdom/protocol/nettrans.py b/supwisdom/protocol/nettrans.py
index 0d1df81..4973c8c 100644
--- a/supwisdom/protocol/nettrans.py
+++ b/supwisdom/protocol/nettrans.py
@@ -5,14 +5,10 @@
 import traceback
 import simplejson as json
 
-
-def _unicode_str(value):
-    if isinstance(value, str):
-        return value.decode('utf-8')
-    elif isinstance(value, unicode):
-        return value
-    else:
-        return unicode(value)
+"""
+后台服务的字符编码
+"""
+SERVICE_ENCODING = 'utf-8'
 
 
 class message_writer:
@@ -21,6 +17,14 @@
     def __init__(self):
         self.clear()
 
+    def _unicode_str(value):
+        if isinstance(value, str):
+            return value.decode('utf-8')
+        elif isinstance(value, unicode):
+            return value
+        else:
+            return unicode(value)
+
     def clear(self):
         self._attr = {}
         self._row_data = []
@@ -31,13 +35,13 @@
     def attr(self, name, value):
         if name in self._attr:
             raise ValueError('Attribute [%s] already exists' % name)
-        self._attr[name] = _unicode_str(value)
+        self._attr[name] = self._unicode_str(value)
         return self
 
     def row(self, name, value):
         if not (name in self._col_names):
             self._col_names.append(name)
-        self._row[name] = _unicode_str(value)
+        self._row[name] = self._unicode_str(value)
 
     def add_row(self):
         if not self._row:
@@ -77,7 +81,7 @@
         """
         if not self._frozen:
             self._normalize()
-        seri = json.dumps(self._attr, ensure_ascii=False, encoding='utf-8')
+        seri = json.dumps(self._attr, ensure_ascii=False, encoding=SERVICE_ENCODING)
         return seri
 
     def root(self):
@@ -92,6 +96,14 @@
     def __init__(self):
         self.clear()
 
+    def _unicode_str(value):
+        if isinstance(value, str):
+            return value.decode(SERVICE_ENCODING)
+        elif isinstance(value, unicode):
+            return value
+        else:
+            return unicode(value)
+
     def clear(self):
         """ 清空数据
         """
@@ -107,7 +119,7 @@
         """
         self.clear()
         try:
-            message = _unicode_str(message)
+            message = self._unicode_str(message)
             obj = json.loads(message)
             #obj = json.loads(msg.replace('\\',"\\\\"))
         except Exception, ex:
