diff options
| author | Guido van Rossum <guido@python.org> | 2000-12-19 01:29:00 +0000 |
|---|---|---|
| committer | Guido van Rossum <guido@python.org> | 2000-12-19 01:29:00 +0000 |
| commit | dbcba5c55ccbda8dc13ec545ef725e80cde6359a (patch) | |
| tree | d82264d48bf48ad3fe3c128458bd4c98a457bb3f | |
| parent | 36ea5001bf9ffcd76604028cbd916a9b6c02a8de (diff) | |
| download | cpython-dbcba5c55ccbda8dc13ec545ef725e80cde6359a.tar.gz | |
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.
| -rw-r--r-- | Lib/pickle.py | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/Lib/pickle.py b/Lib/pickle.py index c26c2e533f..fb9448e977 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) |
