diff --git a/tablib/formats/_html.py b/tablib/formats/_html.py index 19c8081..c516e31 100644 --- a/tablib/formats/_html.py +++ b/tablib/formats/_html.py @@ -14,6 +14,7 @@ else: from tablib.packages import markup import tablib +import codecs BOOK_ENDINGS = 'h3' @@ -45,7 +46,9 @@ def export_set(dataset): page.table.close() - stream.writelines(str(page)) + # Allow unicode characters in output + wrapper = codecs.getwriter("utf8")(stream) + wrapper.writelines(unicode(page)) return stream.getvalue() diff --git a/tablib/packages/markup.py b/tablib/packages/markup.py index 234f116..0198899 100644 --- a/tablib/packages/markup.py +++ b/tablib/packages/markup.py @@ -67,7 +67,7 @@ class element: def render( self, tag, single, between, kwargs ): """Append the actual tags to content.""" - out = "<%s" % tag + out = u"<%s" % tag for key, value in kwargs.iteritems( ): if value is not None: # when value is None that means stuff like <... checked> key = key.strip('_') # strip this so class_ will mean class, etc. @@ -75,16 +75,16 @@ class element: key = 'http-equiv' elif key == 'accept_charset': key = 'accept-charset' - out = "%s %s=\"%s\"" % ( out, key, escape( value ) ) + out = u"%s %s=\"%s\"" % ( out, key, escape( value ) ) else: - out = "%s %s" % ( out, key ) + out = u"%s %s" % ( out, key ) if between is not None: - out = "%s>%s" % ( out, between, tag ) + out = u"%s>%s" % ( out, between, tag ) else: if single: - out = "%s />" % out + out = u"%s />" % out else: - out = "%s>" % out + out = u"%s>" % out if self.parent is not None: self.parent.content.append( out ) else: diff --git a/test_tablib.py b/test_tablib.py index 70e6051..4b4ad93 100755 --- a/test_tablib.py +++ b/test_tablib.py @@ -309,7 +309,7 @@ class TablibTestCase(unittest.TestCase): def test_unicode_append(self): """Passes in a single unicode character and exports.""" - new_row = ('å', 'é') + new_row = (u'å', u'é') data.append(new_row) data.json