Minimal fix for the complaints about pickling Unicode objects. (SF

bugs #126161 and 123634).

The solution doesn't use the unicode-escape encoding; that has other
problems (it seems not 100% reversible).  Rather, it transforms the
input Unicode object slightly before encoding it using
raw-unicode-escape, so that the decoding will reconstruct the original
string: backslash and newline characters are translated into their
\uXXXX counterparts.

This is backwards incompatible for strings containing backslashes, but
for some of those strings, the pickling was already broken.
This commit is contained in:
Guido van Rossum 2000-12-19 01:29:00 +00:00
parent 20d3fc071b
commit a31b4ef7c5

View file

@ -291,6 +291,8 @@ class Pickler:
s = mdumps(l)[1:]
self.write(BINUNICODE + s + encoding)
else:
object = object.replace(u"\\", u"\\u005c")
object = object.replace(u"\n", u"\\u000a")
self.write(UNICODE + object.encode('raw-unicode-escape') + '\n')
memo_len = len(memo)