changeset 147:a4a0ca41b6ad trunk

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.
author cmlenz
date Tue, 15 Aug 2006 13:17:51 +0000
parents 04799355362d
children dcc9dc25bc59
files markup/core.py markup/tests/core.py
diffstat 2 files changed, 22 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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')
 
 
--- 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('<li>Über uns</li>')
+        self.assertEqual('<li>Über uns</li>', xml.render())
+
+    def test_render_unicode(self):
+        xml = XML('<li>Über uns</li>')
+        self.assertEqual(u'<li>Über uns</li>', xml.render(encoding=None))
+
+    def test_render_ascii(self):
+        xml = XML('<li>Über uns</li>')
+        self.assertEqual('<li>&#220;ber uns</li>', 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
Copyright (C) 2012-2017 Edgewall Software