@@ -46,11 +46,21 @@ def asUnicode(s):
46
46
except :
47
47
return str (s )
48
48
49
- def ensureUtf (s ):
50
- if type (s ) == unicode :
51
- return s .encode ('utf8' , 'ignore' )
49
+ def toUnicode (s , encoding = 'utf8' ):
50
+ """Converts input to unicode if necessary.
51
+
52
+ If `s` is bytes, it will be decoded using the `encoding` parameters.
53
+
54
+ This function is used for preprocessing /source/ and /filename/ arguments
55
+ to the builtin function `compile`.
56
+ """
57
+ # In Python2, str == bytes.
58
+ # In Python3, bytes remains unchanged, but str means unicode
59
+ # while unicode is not defined anymore
60
+ if type (s ) == bytes :
61
+ return s .decode (encoding , 'ignore' )
52
62
else :
53
- return str ( s )
63
+ return s
54
64
55
65
def findLoc (body , line , total ):
56
66
for i in range (len (body )):
@@ -190,11 +200,11 @@ def handleEval(data):
190
200
loc = form [0 ]
191
201
isEval = False
192
202
try :
193
- code = compile (ensureUtf (code ), ensureUtf (data [2 ]["name" ]), 'eval' )
203
+ code = compile (toUnicode (code ), toUnicode (data [2 ]["name" ]), 'eval' )
194
204
isEval = True
195
205
except :
196
206
try :
197
- code = compile (ensureUtf (code ), ensureUtf (data [2 ]["name" ]), 'exec' )
207
+ code = compile (toUnicode (code ), toUnicode (data [2 ]["name" ]), 'exec' )
198
208
except :
199
209
e = traceback .format_exc ()
200
210
send (data [0 ], "editor.eval.python.exception" , {"ex" : cleanTrace (e ), "meta" : loc })
@@ -260,11 +270,11 @@ def ipyEval(data):
260
270
loc = form [0 ]
261
271
isEval = False
262
272
try :
263
- compile (ensureUtf (code ), ensureUtf (data [2 ]["name" ]), 'eval' )
273
+ compile (toUnicode (code ), toUnicode (data [2 ]["name" ]), 'eval' )
264
274
isEval = True
265
275
except :
266
276
try :
267
- compile (ensureUtf (code ), ensureUtf (data [2 ]["name" ]), 'exec' )
277
+ compile (toUnicode (code ), toUnicode (data [2 ]["name" ]), 'exec' )
268
278
except :
269
279
e = traceback .format_exc ()
270
280
send (data [0 ], "editor.eval.python.exception" , {"ex" : cleanTrace (e ), "meta" : loc })
0 commit comments