@@ -127,6 +127,7 @@ def read_to_str(data):
127127 return '' .join (chr (char ) for char in data )
128128
129129 unichr = chr
130+ unicode = str
130131
131132else :
132133 # Python 2 interpreter : str & unicode
@@ -983,7 +984,11 @@ def do_array(self, parent=None, ident=0):
983984 else :
984985 for _ in range (size ):
985986 res = self ._read_value (type_char , ident )
986- log_debug ("Native value: {0}" .format (res ), ident )
987+ _res = res
988+ # py2
989+ if str is not unicode and isinstance (res , unicode ):
990+ _res = res .encode ('ascii' , 'replace' )
991+ log_debug ("Native value: {0}" .format (_res ), ident )
987992 array .append (res )
988993
989994 return array
@@ -1074,13 +1079,15 @@ def _read_value(self, field_type, ident, name=""):
10741079 # We don't need details for arrays and objects
10751080 field_type = field_type [0 ]
10761081
1082+ _res = None
10771083 if field_type == self .TYPE_BOOLEAN :
10781084 (val ,) = self ._readStruct (">B" )
10791085 res = bool (val )
10801086 elif field_type == self .TYPE_BYTE :
10811087 (res ,) = self ._readStruct (">b" )
10821088 elif field_type == self .TYPE_CHAR :
1083- res = unichr (self ._readStruct (">H" )[0 ])
1089+ _res = self ._readStruct (">H" )[0 ]
1090+ res = unichr (_res )
10841091 elif field_type == self .TYPE_SHORT :
10851092 (res ,) = self ._readStruct (">h" )
10861093 elif field_type == self .TYPE_INTEGER :
@@ -1096,7 +1103,10 @@ def _read_value(self, field_type, ident, name=""):
10961103 else :
10971104 raise RuntimeError ("Unknown typecode: {0}" .format (field_type ))
10981105
1099- log_debug ("* {0} {1}: {2}" .format (field_type , name , res ), ident )
1106+ if _res is None :
1107+ _res = res
1108+
1109+ log_debug ("* {0} {1}: {2}" .format (field_type , name , _res ), ident )
11001110 return res
11011111
11021112 def _convert_char_to_type (self , type_char ):
@@ -1512,7 +1522,10 @@ def write_array(self, obj):
15121522 else :
15131523 log_debug ("Write array of type %s" % type_char )
15141524 for v in obj :
1515- log_debug ("Writing: %s" % v )
1525+ _v = v
1526+ if str is not unicode and isinstance (v , unicode ):
1527+ _v = v .encode ('ascii' , 'replace' )
1528+ log_debug ("Writing: %s" % _v )
15161529 self ._write_value (type_char , v )
15171530
15181531 def _write_value (self , field_type , value ):
0 commit comments