[Twisted-Python] response with special characters, utf-8
Mario Ruggier
mario at ruggier.org
Sat Mar 29 03:41:00 MST 2003
On samedi, mars 29, 2003, at 06:42 Europe/Amsterdam, Matthias Urlichs
wrote:
>> request.setHeader = ('Content-Type', 'text/html; charset=utf-8')
>
> seems to have a '=' sign in it which doesn't make ANY sense at all.
Yeah, looks bizarre. But that's how they say it should be set:
http://www.w3.org/International/O-HTTP-charset
>> 3 sample èçé characters (e+grave, c+cedille, e+aigu)
>
> Note that your email was encoded as iso-8859-1.
Yes, what can I say -- that's mail...
If I try to manually tell python that a string is latin-1, and i want it
in utf-8, i get similar garbage results in the client browsers:
return unicode('èçé','latin-1').encode('utf-8')
How can I verify that the web clients are indeed receiving utf-8?
It seems that they are, but something very strange is happening
here, on Mac OS Jaguar (note that I am running with
sys.setdefaultencoding('utf-8') in sitecustomize.py):
- in IE:mac 5.2, the character set chosen by default is indeed
UTF-8, but the 3 non-ascii characters are just not displayed,
and IE does not allow to dynamically change the automatically
selected character set
- in Safari (beta 6) the indicated character set is "default", whatever
that is,
where the 3 chars are not displayed. iIf I change to utf-8 (he allows
it),
the 3 chars are still not displayed, but if i choose the char set he
calls
"Western (Mac OS Roman)" the 3 chars are displayed correctly.
Anyone can tell what's going on?
Also, can anyone tell me if the rpy below works correctly on some
python/twistedweb/client configuration ?
Thanks for any help,
mario
##################################
## chars_test.rpy
from twisted.web import resource
from twisted.web.server import NOT_DONE_YET
def errBack(err, request):
request.write('error: ' + str(err) )
request.finish()
def returnString(result, request):
request.setHeader = ('Content-Type', 'text/html; charset=utf-8')
request.write(result)
request.finish()
def responseString(request):
return '''<html><title>characters test</title>
<meta http-equiv="Content-Type" content="text/html;
charset=utf-8">
</head>
<body>
-a- 3 sample chars -b- èçé -c- èçé -d-
</body>
</html>
'''
class MyResource(resource.Resource):
def render(self, request):
from twisted.internet import threads
d = threads.deferToThread(responseString,request)
d.addCallback(returnString,request)
d.addErrback(errBack, request)
return NOT_DONE_YET
###
resource = MyResource()
###
More information about the Twisted-Python
mailing list