A few hours ago I sent a comment to the issue #4626. I didn't notice the issue was closed. So I repeat it here. I'm interested in comments because I have the feeling it is still a pending annoying isssue. --- I'm glad to have discovered this topic. I bumped into something similar when I toyed with an interactive interpreter. from code import InteractiveInterpreter ii = InteractiveInterpreter() source = ... ii.runsource(source) What should be the encoding and/or the type (str, bytes) of the "source" string? Taking into account the encoding of the script which contains this code, I have the feeling there is always something going wrong, this can be a "non ascii" char in the source (encoded in utf-8!) or the interactive interpreter does not accept very well a byte string representing a utf-8 encoded string. IDLE is not suffering from this. Its interactive interpreter is somehow receiving "ucs-2 ready string" from tkinter. I'm a little bit confused here (win2k, winXP sp2, Python 3.0.1).
I fail to see the issue. runsource() takes a (unicode) string because a Python script is a text; you cannot pass a bytes object, it must be decoded before.
Agreed. Although the docs do not explicitly say "you cannot use bytes as source", this is clearly implicit in the Python3 bytes/string separation. The docs talk only about string inputs.
Additional note: RefMan 2. Lexical analysis: "Python reads program text as Unicode code points;" Doc for runsource says "Compile and run some source in the interpreter. Arguments are the same as for compile_command()". Latter says "sourse is the source string".