# HG changeset patch # User cmlenz # Date 1155647871 0 # Node ID f7fb556f26786a98bd0229fa5830a274b3c4767a # Parent db0dacc1239af23bda0de91092ca36281dfe31b9 Use `xmlcharrefreplace` when encoding the output in `Stream.render()`, so that encoding the output to legacy encodings such as ASCII or ISO-8859-1 should always work. diff --git a/markup/core.py b/markup/core.py --- a/markup/core.py +++ b/markup/core.py @@ -91,7 +91,7 @@ generator = self.serialize(method=method, **kwargs) output = u''.join(list(generator)) if encoding is not None: - return output.encode(encoding) + return output.encode(encoding, 'xmlcharrefreplace') return output def select(self, path): @@ -113,6 +113,9 @@ @param method: determines how the stream is serialized; can be either "xml", "xhtml", or "html", or a custom serializer class + + Any additional keyword arguments are passed to the serializer, and thus + depend on the `method` parameter value. """ from markup import output cls = method @@ -433,6 +436,7 @@ return self.uri +# The namespace used by attributes such as xml:lang and xml:space XML_NAMESPACE = Namespace('http://www.w3.org/XML/1998/namespace') diff --git a/markup/tests/core.py b/markup/tests/core.py --- a/markup/tests/core.py +++ b/markup/tests/core.py @@ -15,7 +15,22 @@ import unittest from markup.core import * -from markup.input import ParseError +from markup.input import XML, ParseError + + +class StreamTestCase(unittest.TestCase): + + def test_render_utf8(self): + xml = XML('
  • Über uns
  • ') + self.assertEqual('
  • Über uns
  • ', xml.render()) + + def test_render_unicode(self): + xml = XML('
  • Über uns
  • ') + self.assertEqual(u'
  • Über uns
  • ', xml.render(encoding=None)) + + def test_render_ascii(self): + xml = XML('
  • Über uns
  • ') + self.assertEqual('
  • Über uns
  • ', xml.render(encoding='ascii')) class MarkupTestCase(unittest.TestCase): @@ -98,6 +113,7 @@ def suite(): suite = unittest.TestSuite() + suite.addTest(unittest.makeSuite(StreamTestCase, 'test')) suite.addTest(unittest.makeSuite(MarkupTestCase, 'test')) suite.addTest(doctest.DocTestSuite(Markup.__module__)) return suite