X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=dbuscron%2Fparser.py;h=6937e149273551c1e70eee0b1c2a08e97d0dd2fe;hb=4801eafb397f98ed34b37324f31d706bd95d06e4;hp=23654230606dda616428707e9df7c5a429cacf6e;hpb=93d465097f0360eb23b8383b04052328ce0f2360;p=dbuscron diff --git a/dbuscron/parser.py b/dbuscron/parser.py index 2365423..6937e14 100644 --- a/dbuscron/parser.py +++ b/dbuscron/parser.py @@ -3,12 +3,22 @@ from __future__ import with_statement import re from dbuscron.bus import DbusBus -def unescape(value): - if not value or r'\x' not in value: - return value - - r = re.compile(r'\\x([0-9A-Fa-f]{2})') - return r.sub(lambda m: chr(int(m.group(1), 16)), value) +def unescape_(): + h = '[0-9A-Fa-f]' + r = re.compile(r'\\x('+h+r'{2})|\\u('+h+'{4})') + def unescape(value): + if not (value and \ + (r'\x' in value or r'\u' in value)): + return value + + return r.sub(\ + lambda m: chr(int(m.group(1), 16)) \ + if m.group(1) is not None else \ + unichr(int(m.group(2), 16))\ + .encode('utf-8'),\ + value) + return unescape +unescape = unescape_() def product(*args): if args: