A python IDE for teaching that supports cyrillic i/o

Leo Kislov Leo.Kislov at gmail.com
Sun Nov 19 17:54:33 EST 2006


Kirill Simonov wrote:
> On Sun, Nov 19, 2006 at 03:27:32AM -0800, Leo Kislov wrote:
> > IDLE on Windows works fine for your example in interactive console:
> >
> > >>> name = raw_input("What's your name? ")
>
> Have you tried to use cyrillic characters in a Python string in
> interactive console? When I do it, I get the "Unsupported characters in
> input" error. For instance,
>
> >>> print "Привет"  # That's "Hi" in Russian.
> Unsupported characters in input

That works for me in Win XP English, with Russian locale and Russian
language for non-unicode programs. Didn't you say you want to avoid
unicode? If so, you need to set proper locale and language for
non-unicode programs.

>
> > And another question: are you aware of the fact that recommended way to
> > handle non-ascii characters is to use unicode type? Most of IDEs should
> > work fine with unicode.
>
> Usually using unicode type gives you much more headache than benefits
> unless you are careful enough to never mix unicode and str objects.

For a professional programmer life is full of headaches like this :)
For high school students it could be troublesome and annoying, I agree.


> Anyway, I just want the interactive console of an IDE to behave like a
> real Python console under a UTF-8 terminal (with sys.stdout.encoding ==
> 'utf-8').

Do you realize that utf-8 locale makes len() function and slicing of
byte strings look strange for high school students?

hi = u"Привет".encode("utf-8")
r = u"р".encode("utf-8")
print len(hi)        # prints 12
print hi[1] == r   # prints False
for char in hi:
    print char      # prints garbage

As I see you have several options:
1. Set Russian locale and Russian language for non-unicode programs on
Windows.
2. Introduce students to unicode.
3. Wait for python 3.0
4. Hack some IDE to make unicode friendly environment like unicode
literals by default, type("Привет") == unicode, unicode
stdin/stdout, open() uses utf-8 encoding by default for text files,
etc...

   -- Leo




More information about the Python-list mailing list