[Python-Dev] PEP 3333: wsgi_string() function

Antoine Pitrou solipsis at pitrou.net
Tue Jan 4 14:51:30 CET 2011


On Tue, 04 Jan 2011 14:33:37 +0100
Victor Stinner <victor.stinner at haypocalc.com> wrote:
> Le mardi 04 janvier 2011 à 13:20 +0100, Antoine Pitrou a écrit :
> > On Tue, 04 Jan 2011 03:44:53 +0100
> > Victor Stinner <victor.stinner at haypocalc.com> wrote:
> > > def wsgi_string(u):
> > >     # Convert an environment variable to a WSGI "bytes-as-unicode"
> > > string
> > >     return u.encode(enc, esc).decode('iso-8859-1')
> > > 
> > > def run_with_cgi(application):
> > >     environ = {k: wsgi_string(v) for k,v in os.environ.items()}
> > >     environ['wsgi.input']        = sys.stdin
> > >     environ['wsgi.errors']       = sys.stderr
> > >     environ['wsgi.version']      = (1, 0)
> > > ...
> > > --------------
> > > 
> > > What is this horrible encoding "bytes-as-unicode"? os.environ is
> > > supposed to be correctly decoded and contain valid unicode characters.
> > > If WSGI uses another encoding than the locale encoding (which is a bad
> > > idea), it should use os.environb and decodes keys and values using its
> > > own encoding.
> > > 
> > > If you really want to store bytes in unicode, str is not the right type:
> > > use the bytes type and use os.environb instead.
> > 
> > +1. We should minimize such reencoding dances, and avoid promoting them.
> 
> The example from the PEP is specific to CGI and is a little bit special.

Well, it would be better if it used os.environb anyway ;)

Regards

Antoine.




More information about the Python-Dev mailing list