diff --git a/supwisdom/protocol/amassprotocol.py b/supwisdom/protocol/amassprotocol.py
index fde1bbe..574e765 100644
--- a/supwisdom/protocol/amassprotocol.py
+++ b/supwisdom/protocol/amassprotocol.py
@@ -111,7 +111,7 @@
         if t == IFT_USHORT or t == IFT_ULONG or t == IFT_NULL or t == IFT_BYTE or t == IFT_LONG:
             if isinstance(value, int):
                 b = value
-            elif isinstance(value, str):
+            elif isinstance(value, str) or isinstance(value, unicode):
                 if value.startswith('0x'):
                     b = int(value, 16)
                 else:
@@ -126,7 +126,9 @@
             b = value + "00"
         else:
             if not isinstance(value, str):
-                raise ValueError("field %s value type not string" % n)
+                if not isinstance(value, unicode):
+                    raise ValueError("field %s value type not string" % n)
+                value = value.encode("utf-8")
             if t == IFT_DATETIME:
                 l *= 2
             elif value.startswith('0x'):
@@ -148,6 +150,11 @@
             return self.value[n]
         raise ValueError("Field %s not specified" % n)
 
+    def has_field(self, index):
+        field_def = self.get_field_def(index)
+        n = field_def[5]
+        return n in self.value
+
     def encode_bitmap(self, bitmap):
         buffer = []
         offset = 0
@@ -322,8 +329,8 @@
                 #else:
                 #    value = temp
                 value = self.buffer_2_string(data[offset:endpos], ftype)
-                if fflag != 2 and ftype == IFT_BUFFER:
-                    value = '0x' + codecs.encode(value, 'hex')
+                # if fflag != 2 and ftype == IFT_BUFFER:
+                #     value = '0x' + codecs.encode(value, 'hex')
             self.set(findex, value)
             #print "parse field[%s] OK =====" % fname
             offset = endpos
@@ -355,7 +362,7 @@
             raise ValueError("input data type error")
 
     def get_2byte_int(self, data):
-        return struct.unpack(">H", data)[0]
+        return struct.unpack("<H", data)[0]
 
     def get_3byte_int(self, data):
         temp = data + chr(0)
@@ -364,6 +371,17 @@
     def get_4byte_int(self, data):
         return struct.unpack("<I", data)[0]
 
+    def get_byte_int(self, data, signed=False):
+        dl = len(data)
+        if dl <= 0 or dl > 4:
+            raise ValueError(u"Data length must between 1 and 4")
+        if dl < 4:
+            data = data + chr(0) * (4 - dl)
+        if signed:
+            return struct.unpack('<i', data)[0]
+        else:
+            return struct.unpack('<I', data)[0]
+
     def set_2byte_int(self, data):
         return struct.pack('<H', data)
 
diff --git a/supwisdom/protocol/webservice.py b/supwisdom/protocol/webservice.py
index 48062b3..99ee4ea 100644
--- a/supwisdom/protocol/webservice.py
+++ b/supwisdom/protocol/webservice.py
@@ -200,5 +200,8 @@
     def _pack_body(self, request):
         funcdata = request.serialize()
         request_token = self.session.gen_request_token()
-        request_token['funcdata'] = funcdata.decode('utf-8', 'ignore')
+        if isinstance(funcdata, unicode):
+            request_token['funcdata'] = funcdata
+        elif isinstance(funcdata, str):
+            request_token['funcdata'] = funcdata.encode('gbk', 'ignore')
         return json.dumps(request_token, ensure_ascii=False)
