request.response.setHeader() should convert unicode to str

Bug #284756 reported by Marius Gedminas
Affects Status Importance Assigned to Milestone
Zope 3
Won't Fix

Bug Description

I had a view that did essentially:

  class MyView(BrowserView):
      def __call__(self):
          filename = u'someunicodestring' # in real life this was self.context.__name__, which was a unicode string with ascii-only characters
          self.request.response.setHeader('Content-Disposition', 'attachment; filename="%s"' % filename)
          return '<someXml/>'

and I got a UnicodeDecodeError: 'ascii' codec can't decode byte 0x8b in position 1: ordinal not in range(128) in /zope/server/", line 185, in append:
    self.strbuf = strbuf + s

Turns out zope.server was trying to concatenate a unicode string containing HTTP response headers with a byte string containing my XML, compressed with gzip.

I assume this problem would also occur if I tried to serve binary data (say, a PNG file with the proper content-type) and had a unicode string in one of the response headers.

HTTPRequest.setHeader() should convert unicode to str and give me a failure early (or silently succeed if my unicode string contains only ASCII).

Tres Seaver (tseaver)
Changed in zope3:
status: New → Won't Fix
Revision history for this message
Colin Watson (cjwatson) wrote :

The zope.publisher project on Launchpad has been archived at the request of the Zope developers (see and If this bug is still relevant, please refile it at

Changed in zope.publisher:
status: New → Invalid
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.