On Wed, Jan 26, 2005 at 08:48:43AM -0500, Kevin Dangoor wrote:
> If there *is* currently a way to set the default, that would be nice to
> know.
There is currently no way to change the default. You can do
something like this:
class RootDirectory(Directory):
def _q_traverse(self, path):
get_response().set_charset('utf-8')
return super(RootDirectory, self)._q_traverse(path)
We could add a DEFAULT_CHARSET attribute to HTTPResponse (see the
attached patch). There is still a problem with set_content_type(),
I think. set_content_type() is often used when serving up binary
data. In that case I don't think you want to default charset to be
UTF-8, even though you probably want text/* responses to be UTF-8.
We could change set_content_type() to this:
def set_content_type(self, content_type, charset=None):
self.content_type = content_type
if charset is None:
if content_type.startswith('text/'):
charset = self.DEFAULT_CHARSET
else:
charset = 'iso-8859-1'
self.charset = charset
That seems pretty complicated. Unfortunately, leaving the default
for set_content_type() be 'iso-8859-1' would also be surprising. I
guess another option would be to set self.charset set None if no
charset was supplied to set_content_type(). In that case, the
charset parameter of the Content-Type header would be left out.
Not sure what to do.
Neil
diff -rN -u quixote-old/http_response.py quixote-new/http_response.py
--- quixote-old/http_response.py 2005-01-26 15:49:37.000000000 -0700
+++ quixote-new/http_response.py 2005-01-28 23:35:55.000000000 -0700
@@ -133,12 +133,14 @@
else's problem.
"""
- def __init__(self, status=200, body=None, charset='iso-8859-1'):
+ DEFAULT_CHARSET = 'iso-8859-1'
+
+ def __init__(self, status=200, body=None, charset=None):
"""
Creates a new HTTP response.
"""
self.content_type = 'text/html'
- self.charset = charset
+ self.charset = charset or self.DEFAULT_CHARSET
self.set_status(status)
self.headers = {}