diff --git a/src/dynamic_reconfigure/encoding.py b/src/dynamic_reconfigure/encoding.py index a256b0d2..f58b2a4a 100644 --- a/src/dynamic_reconfigure/encoding.py +++ b/src/dynamic_reconfigure/encoding.py @@ -275,6 +275,12 @@ def add_params(group, descr): return d def decode_config(msg, description = None): + if sys.version < '3': + for s in msg.strs: + try: + s.value.decode('ascii') + except UnicodeDecodeError: + s.value=s.value.decode('utf-8') d = Config([(kv.name, kv.value) for kv in msg.bools + msg.ints + msg.strs + msg.doubles]) if not msg.groups == [] and description is not None: d["groups"] = get_tree(msg) diff --git a/test/simple_python_client_test.py b/test/simple_python_client_test.py index 81b3b779..99834fb5 100755 --- a/test/simple_python_client_test.py +++ b/test/simple_python_client_test.py @@ -80,7 +80,21 @@ def testmultibytestring(self): config = client.get_configuration(timeout=5) - self.assertEqual("いろは", config['mstr_']) + self.assertEqual(u"いろは", config['mstr_']) + self.assertEqual(u"いろは", rospy.get_param('/ref_server/mstr_')) + + str_ = u"にほへ" + + client.update_configuration( + {"mstr_": str_} + ) + + rospy.sleep(1.0) + + config = client.get_configuration(timeout=5) + + self.assertEqual(u"にほへ", config['mstr_']) + self.assertEqual(u"にほへ", rospy.get_param('/ref_server/mstr_')) if __name__ == "__main__": import rostest