From fb651ae771d581925c5ee7a20305fef9059ce0ff Mon Sep 17 00:00:00 2001 From: Stefan Behnel Date: Mon, 6 Jul 2009 17:29:40 +0200 Subject: [PATCH] Py3 fix: make sure byte strings end up in the code as expected (not like >>b'...'<<) --- Cython/Compiler/StringEncoding.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/Cython/Compiler/StringEncoding.py b/Cython/Compiler/StringEncoding.py index e7db555b..22644c6e 100644 --- a/Cython/Compiler/StringEncoding.py +++ b/Cython/Compiler/StringEncoding.py @@ -145,12 +145,16 @@ def escape_character(c): return c def escape_byte_string(s): + """Escape a byte string so that it can be written into C code. + Note that this returns a Unicode string instead which, when + encoded as ISO-8859-1, will result in the correct byte sequence + being written. + """ if _has_specials(s): for special, replacement in _c_special_replacements: s = s.replace(special, replacement) try: - s.decode("ASCII") # trial decoding: plain ASCII => done - return s + return s.decode("ASCII") # trial decoding: plain ASCII => done except UnicodeDecodeError: pass if sys.version_info[0] >= 3: @@ -161,7 +165,7 @@ def escape_byte_string(s): extend(('\\%3o' % b).encode('ASCII')) else: append(b) - return bytes(s_new) + return s_new.decode('ISO-8859-1') else: l = [] append = l.append @@ -171,7 +175,7 @@ def escape_byte_string(s): append('\\%3o' % o) else: append(c) - return join_bytes(l) + return join_bytes(l).decode('ISO-8859-1') def split_docstring(s): if len(s) < 2047: -- 2.26.2