[Python-Dev] PEP 3333: wsgi_string() function
Victor Stinner
victor.stinner at haypocalc.com
Tue Jan 4 03:44:53 CET 2011
Hi,
In the PEP 3333, I read:
--------------
import os, sys
enc, esc = sys.getfilesystemencoding(), 'surrogateescape'
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.
Victor
More information about the Python-Dev
mailing list