# HG changeset patch # User cmlenz # Date 1156188329 0 # Node ID 061491fb4ea852dcc3e0f454741be8ed5bbf71a4 # Parent 13909179e5e1c86ddbedcdd052ae1bc6d27b88be String literals in XPath expressions are assumed to be UTF-8 encoded. diff --git a/markup/eval.py b/markup/eval.py --- a/markup/eval.py +++ b/markup/eval.py @@ -270,6 +270,11 @@ for template expressions. """ + def visitConst(self, node, locals_=False): + if isinstance(node.value, str): + return ast.Const(node.value.decode('utf-8')) + return node + def visitGetattr(self, node, locals_=False): return ast.CallFunc(ast.Name('_lookup_attr'), [ ast.Name('data'), self.visit(node.expr, locals_=locals_), diff --git a/markup/tests/eval.py b/markup/tests/eval.py --- a/markup/tests/eval.py +++ b/markup/tests/eval.py @@ -33,6 +33,8 @@ self.assertEqual(u'þ', expr.evaluate({})) expr = Expression("u'\xfe'") self.assertEqual(u'þ', expr.evaluate({})) + expr = Expression("'\xc3\xbe'") + self.assertEqual(u'þ', expr.evaluate({})) def test_num_literal(self): self.assertEqual(42, Expression("42").evaluate({}))