@@ -177,7 +177,7 @@ def surrogateescape_handler(exc):
177177# exception anyway after this function is called, even though I think
178178# it's doing what it should. It seems that the strict encoder is called
179179# to encode the unicode string that this function returns ...
180- decoded = replace_surrogate_encode (mystring )
180+ decoded = replace_surrogate_encode (mystring , exc )
181181else :
182182raise exc
183183except NotASurrogateError :
@@ -189,7 +189,7 @@ class NotASurrogateError(Exception):
189189pass
190190
191191
192- def replace_surrogate_encode (mystring ):
192+ def replace_surrogate_encode (mystring , exc ):
193193"""
194194 Returns a (unicode) string, not the more logical bytes, because the codecs
195195 register_error functionality expects this.
@@ -204,7 +204,7 @@ def replace_surrogate_encode(mystring):
204204# The following magic comes from Py3.3's Python/codecs.c file:
205205if not 0xD800 <= code <= 0xDCFF :
206206# Not a surrogate. Fail with the original exception.
207- raise NotASurrogateError
207+ raise exc
208208# mybytes = [0xe0 | (code >> 12),
209209# 0x80 | ((code >> 6) & 0x3f),
210210# 0x80 | (code & 0x3f)]