Skip to content

Commit 2d48977

Browse files
moriyoshitcalmant
authored andcommitted
Fix logging unprintable characters on Py2.
1 parent 0b5e844 commit 2d48977

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

javaobj.py

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

131132
else:
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):

tests/tests.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ def test_char_array(self):
284284
jobj = self.read_file("testCharArray.ser")
285285
pobj = javaobj.loads(jobj)
286286
_logger.debug(pobj)
287-
self.assertEqual(pobj, ['\u0000', '\ud800', '\u0001', '\udc00', '\u0002', '\uffff', '\u0003'])
287+
self.assertEqual(pobj, [u'\u0000', u'\ud800', u'\u0001', u'\udc00', u'\u0002', u'\uffff', u'\u0003'])
288288
self._try_marshalling(jobj, pobj)
289289

290290
def test_enums(self):

0 commit comments

Comments
 (0)