import cgi,os,sys,time from snakeserver.snakelet import Snakelet from snakeserver.webform import FormUploadedFile, FormFileUploadError # this one reads the form post using iso-8859-15 encoding class FormAccepter(Snakelet): sessionType=Snakelet.SESSION_NOT_NEEDED def setInputEncoding(self, request): request.encoding="iso-8859-15" def serve(self, request, response): self.setInputEncoding(request) form = request.getForm() requiredEnc = request.getParameter("outputencoding"); text = request.getParameter("text") if not requiredEnc: requiredEnc = sys.getdefaultencoding() response.content_type="text/html" response.encoding=requiredEnc out = response.getOutput() print >>out,'' print >>out, "

Form results

" print >>out, "

Request parameters:

" print >>out, "Content type=", self.escape(request.getContentType()),"
" print >>out, "Content length=", request.getContentLength(),"
" print >>out, "Request char enc=", request.encoding,"
" print >>out, "Default encoding="+sys.getdefaultencoding(),"
" print >>out, "Out encoding="+requiredEnc,"
" print >>out, "

Submitted text:

" if text: print >>out, "

TEXT={"+text+"} length=",len(text)," type=",self.escape(repr(type(text))) print >>out, "
TEXT BYTES: { " for c in text: print >>out, hex(ord(c)), " " print >>out, " }
" else: print >>out, "

NO TEXT!!
" ok=True print >>out, "

" if type(text) is unicode: print >>out,"✓ type of text is unicode.
" else: print >>out,"✗ type of text is not unicode!
" ok=False if len(text)==4: print >>out,"✓ text consists of 4 characters.
" else: print >>out,"✗ text does not consist of 4 characters!
" ok=False if text==u'\u20ac\u00eb\u00a9\u2661': print >>out,"✓ text contains the correct unicode characters.
" else: print >>out,"✗ text does not contain the correct unicode characters!
" ok=False if not ok: print >>out,"Something is wrong! The characters have not been processed correctly
" print >>out,"


" print >>out,"""

This is what you should see:

TEXT={€ë©♡} length= 4 type= <type 'unicode'>
TEXT BYTES: { 0x20ac 0xeb 0xa9 0x2661 }

""" print >>out,'\n' # this one reads the form post using UTF-8 encoding class UTF8FormAccepter(FormAccepter): def setInputEncoding(self, request): request.encoding="UTF-8"