Download Install Tutorial Docs FAQ Tools WikiLicense Team IRC Planet Involvement Shop Book

Changeset 1087

Show
Ignore:
Timestamp:
05/02/06 17:12:30
Author:
fumanchu
Message:

Fix for #328 (encoding 'errors' argument).

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/cherrypy/lib/encodings.py

    r1078 r1087  
    5050# Encoding 
    5151 
    52 def encode(encoding=None): 
     52def encode(encoding=None, errors='strict'): 
    5353    ct = cherrypy.response.headers.elements("Content-Type") 
    5454    if ct: 
     
    5656        if ct.value.lower().startswith("text/"): 
    5757            # Set "charset=..." param on response Content-Type header 
    58             ct.params['charset'] = find_acceptable_charset(encoding
     58            ct.params['charset'] = find_acceptable_charset(encoding, errors=errors
    5959            cherrypy.response.headers["Content-Type"] = str(ct) 
    6060 
    61 def encode_stream(encoding): 
     61def encode_stream(encoding, errors='strict'): 
    6262    """Encode a streaming response body. 
    6363     
     
    6767    def encoder(body): 
    6868        for line in body: 
    69             yield line.encode(encoding
     69            yield line.encode(encoding, errors
    7070    cherrypy.response.body = encoder(cherrypy.response.body) 
    7171    return True 
    7272 
    73 def encode_string(encoding): 
     73def encode_string(encoding, errors='strict'): 
    7474    """Encode a buffered response body.""" 
    7575    try: 
    7676        body = [] 
    7777        for chunk in cherrypy.response.body: 
    78             body.append(chunk.encode(encoding)) 
     78            body.append(chunk.encode(encoding, errors)) 
    7979        cherrypy.response.body = body 
    8080    except UnicodeError: 
     
    8383        return True 
    8484 
    85 def find_acceptable_charset(encoding=None, default_encoding='utf-8'): 
     85def find_acceptable_charset(encoding=None, default_encoding='utf-8', errors='strict'): 
    8686    response = cherrypy.response 
    8787     
     
    9999    if encoding is not None: 
    100100        # If specified, force this encoding to be used, or fail. 
    101         if encoder(encoding): 
     101        if encoder(encoding, errors): 
    102102            return encoding 
    103103        else: 
     
    110110        # Any character-set is acceptable. 
    111111        charsets = [] 
    112         if encoder(default_encoding): 
     112        if encoder(default_encoding, errors): 
    113113            return default_encoding 
    114114        else: 
     
    124124            if iso not in charsets: 
    125125                attempted_charsets.append(iso) 
    126                 if encoder(iso): 
     126                if encoder(iso, errors): 
    127127                    return iso 
    128128         
     
    133133                    if default_encoding not in attempted_charsets: 
    134134                        attempted_charsets.append(default_encoding) 
    135                         if encoder(default_encoding): 
     135                        if encoder(default_encoding, errors): 
    136136                            return default_encoding 
    137137                else: 
     
    139139                    if encoding not in attempted_charsets: 
    140140                        attempted_charsets.append(encoding) 
    141                         if encoder(encoding): 
     141                        if encoder(encoding, errors): 
    142142                            return encoding 
    143143     

Hosted by WebFaction

Log in as guest/cpguest to create tickets