From: Guido van Rossum Date: Tue, 19 Dec 2000 01:29:00 +0000 (+0000) Subject: Minimal fix for the complaints about pickling Unicode objects. (SF X-Git-Tag: v2.1a1~540 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a31b4ef7c526b7f17620024248d11a631ef59644;p=thirdparty%2FPython%2Fcpython.git 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. --- diff --git a/Lib/pickle.py b/Lib/pickle.py index c26c2e533ffb..fb9448e97717 100644 --- a/Lib/pickle.py +++ b/Lib/pickle.py @@ -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)