2011-07-15 15 views
6

Próbuję zebrać trochę unicode raw_input w IDE Pythona domyślne, io ile mi wiadomo, powinno być tak proste, jak:Nie można wejściowe unicode w IDE Pythona (Mac OS X)

>>> c = raw_input() 
日本語 
>>> print c 
日本語 

Jednak, gdy próbuję wprowadzić znaki Unicode, komputer generuje sygnały dźwiękowe i kończy się pustym łańcuchem. (Aby to zrobić, klikam przełącznik IME w pobliżu czasu i wybieram odpowiednią metodę wprowadzania danych (w tym przypadku japońskie wejście). Poza IDE Pythona, dane wejściowe działają dobrze, mogę wprowadzić znaki i system rozpoznaje je jako dane wejściowe. W IDE napiszę jakąś hiraganę, a okno wyboru kanji pojawi się jak zwykle, ale kiedy wybiorę odpowiednią reprezentację i uderzę enter, usłyszę te dźwięki i kończę z niczym. Sądzę, że jest to miejsce, które przeoczyłem.

wersjach:

Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin 

i

Python 2.5.4 (r254:67916, Jun 24 2010, 21:47:25) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin 

których praca nie. Jest też:

>>> import sys 
>>> sys.getdefaultencoding() 
'ascii' 
>>> sys.stdin.encoding 
'UTF-8' 
>>> sys.stdout.encoding 
'UTF-8' 
>>> sys.getfilesystemencoding() 
'utf-8' 

ale z tego, co przeczytałem, domyślne kodowanie jest tajemniczą bestią. Zmiana i tak niczego nie naprawi. To znaczy, że nie działa

>>> import sys 
>>> sys.setdefaultencoding('utf-8') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'module' object has no attribute 'setdefaultencoding' 
>>> reload(sys) 
<module 'sys' (built-in)> 
>>> sys.setdefaultencoding('utf-8') 
>>> # !!! 
... c = raw_input() 
no dice! 

. Po prostu więcej piszczenia. Nie mogę też wycinać japońskiego tekstu z innych aplikacji.

+0

Przez "Python IDE" masz na myśli IDLE? –

+0

Jeśli masz na myśli IDLE, działa dobrze dla mnie w Pythonie 2.6.5. –

+0

Właściwie miałem na myśli REPL, ale z powodu mózgu. – fromClouds

Odpowiedz

0

Edycja: Próbowałem Python z wiersza poleceń (Terminal), a to nie działa i otrzymuję sygnały, o których mówisz. To nie wydaje się być ograniczeniem Terminala, ponieważ mogę wkleić znaki w wierszu $ w porządku, tylko w bash. To działa w trybie bezczynności, co pokazuję poniżej.

Edit # 2: Co ciekawe, jedna wkładka działa:

$ python -c "exec(\"c=raw_input()\nprint c\")" 
日本語 <-- pasted 
日本語 

Chciałbym umieścić to w komentarzu, ale nie byłoby sformatować poprawnie. Wyjście z 2.6.5 na MacOSX:

Python 2.6.5 (r265:79359, Mar 24 2010, 01:32:55) 
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin 
Type "copyright", "credits" or "license()" for more information. 

    **************************************************************** 
    Personal firewall software may warn about the connection IDLE 
    makes to its subprocess using this computer's internal loopback 
    interface. This connection is not visible on any external 
    interface and no data is sent to or received from the Internet. 
    **************************************************************** 

IDLE 2.6.5  
>>> c=raw_input() 
日本語 
>>> print c 
日本語 
>>> c 
u'\u65e5\u672c\u8a9e' 
>>> 
+0

Dobrze, miło jest mieć niezależne potwierdzenie tego, czego doświadczam. Jednakże, kiedy uruchamiam IDLE, nie mogę również wprowadzać znaków japońskich, ale zamiast od razu odrzucać, po prostu przekazuje znaki ASCII. (Nie jestem pewien, czy znasz japoński wkład, ale wpisujesz rzeczy w fonetyczny angielski i zastępujesz je fonetycznym japońskim, a gdy dojdziesz do końca słowa, otrzymasz listę rozwijaną od wybieramy wersję ideograficzną (chińską), nic z tego nie dzieje się w IDLE (choć pracujemy w trybie "wytnij i wklej") – fromClouds

+0

@fromClouds - Nie znam tej formy wprowadzania (dzięki za lekcję!) Wydaje mi się, że IDLE korzysta z pewnej swobody w standardowym IO i domyślam się, że jest coś niestandardowego w sposobie, w jaki akceptuje wprowadzanie danych z klawiatury. Wątpię, abyś znalazł dla niego opcję ustawienia i być może będziesz musiał znaleźć inne IDE z IDLE do pracy z. –

+0

Dzięki Chris, sądzę, że tak będzie, prawdopodobnie na razie po prostu podłączę do tego interfejs WWW Ponadto cofam to, co powiedziałem wcześniej, wycinam i wklejałem (w przypadku powód) zawiesza się na IDLE. – fromClouds

0

Spróbuj tego:

import codecs, sys 
sys.stdin = codecs.getreader('UTF-8')(sys.stdin) 
sys.stdout = codecs.getwriter('UTF-8')(sys.stdout) 
sys.stderr = codecs.getwriter('UTF-8')(sys.stderr) 

print u'\u65e5\u672c\u8a9e' 

Działa to dla mnie znaków spoza ASCII przy użyciu Putty z kodowaniem terminalu ustawione na UTF-8. Widzę pola, ponieważ nie mam zainstalowanych czcionek dla znaków CJK, ale myślę, że powinno to zrobić dla ciebie.

Powodem tego jest to, że domyślnie interpreter Pythona używa kodeku "ascii" dla stdin, stdout i stderr. Ponieważ ASCII definiuje tylko wartości bajtów od 0 do 127, można drukować tylko te wartości bajtów.

3

Miałem ten sam problem. W moim przypadku okazało się, że jest to problem o nazwie libedit.Naprawiłem to, instalując readline - co musiałem zrobić ze źródła (stąd: http://pypi.python.org/pypi/readline) od momentu użycia pip lub easy_install, z jakiegokolwiek powodu, nie zastąpiło ono readline.

Jeśli masz ipython zainstalowany, powie to na starcie jeśli używasz libedit. I jeśli masz takie samo doświadczenie, jakie zrobiłem, zobaczysz te same problemy zarówno w interpreterze python w Terminalu, jak i w ipythonie. Kiedy naprawdę zainstalowałem readline, a ipython nie informował mnie już, że używa libedit, problemy z wejściem do Unicode zniknęły zarówno w pythonie, jak i ipythonie.

. (Uwaga: Mam też bpython zainstalowany - i, ponieważ nie wydaje się używać readline lub libedit, ale swoje własne procedury line-edycji, wprowadzając Unicode w bpython zawsze pracował)

3

Kod domyślny nie powinien mieć tutaj wpływu. Miałem podobny problem i dla mnie rozwiązaniem było sprawdzenie opcji Escape Inaczej niż ASCII w Terminal> Preferencje> Ustawienia> Zaawansowane. Upewnij się również, że kodowanie znaków jest ustawione na kod Unicode (UTF-8) na tej samej stronie ustawień.

Powiązane problemy