diff --git a/routeros_api/api_structure.py b/routeros_api/api_structure.py index 7899956..74a2651 100644 --- a/routeros_api/api_structure.py +++ b/routeros_api/api_structure.py @@ -3,6 +3,7 @@ import datetime import ipaddress import re +import cchardet as chardet class Field(object): @@ -28,6 +29,8 @@ def get_mikrotik_value(self, string): return string.encode() def get_python_value(self, bytes): + if bytes: + return bytes.decode(chardet.detect(bytes)['encoding']) return bytes.decode() diff --git a/tests/test_resource.py b/tests/test_resource.py index 90ada5d..a8d4e59 100644 --- a/tests/test_resource.py +++ b/tests/test_resource.py @@ -68,3 +68,16 @@ def test_boolean_resource_set(self): communicator.call.assert_called_with( '/boolean/', 'set', arguments={'boolean': b'yes'}, queries={}, additional_queries=()) + + + def test_unicode_decode_error(self): + string = structure.StringField + output = string.get_python_value(string,bytes=b'\xc2') + self.assertEqual(output, 'Â') + + + + def test_blank_decode_byte(self): + string = structure.StringField + output = string.get_python_value(string,bytes=b'') + self.assertEqual(output, '')