2012-04-09 9 views
5

Ich versuche ein spanisches Zeichen in Strings im interaktiven Modus einzugeben. Zum Beispiel option+e e zu produzieren "é", so dass ich eine Aussage wie string="él" machen. Dies funktioniert im Terminal, aber in Python (jede Version, die ich installiert habe, von denen ich mehrere habe) tut es nicht. Es produziert einfach nichts. Dazu gehört auch das Einfügen der Zeichen. Es ist genau das Problem, das in this question beschrieben wird, speziell der Teil über das Einfügen und in seinem Kommentar zu Alex 'Frage, wo er darauf hinweist, dass Alex' Antwort nicht die Frage des Versagens von Copy/Paste in Bezug auf utf-8 Charakteren behandelt. Wie kann ich das machen?Eingabe von utf-8 Zeichen in Python im interaktiven Modus unter OS-X

+0

Was genau meinen Sie mit "dem Python-Interpreter"? Ich greife auf die Python-Shell * über das Terminal zu - wie machst du das? –

+0

Ich denke, ich meinte interaktiven Modus. Die Frage wurde geändert. –

+0

Das beantwortet meine Frage nicht. Wie kommst du zu diesem Ding, das du "interaktiver Modus" nennst? –

Antwort

0

Verwenden Sie u vor dem Zeichenfolgenliteral, um es zu einer Unicode-Zeichenfolge zu machen.

string = u"El avión cayó del cielo" 

wenn das nicht das Problem arbeiten liegt in einem Editor oder Terminal, versuchen Sie in diesem Fall

#coding: utf8 

in einen der ersten zwei Zeilen Ihres Python-Programm hinzufügen und einen geeigneten Editor mit Unicode verwenden Unterstützung.

+0

Der erste Vorschlag funktioniert nicht, ich kann das Zeichen überhaupt nicht in den Interpreter eingeben.Ich bin mir nicht sicher, was du im zweiten Vorschlag meinst. Ich verwende die Terminal-App, die mit OS-X geliefert wird, und ich kann die Zeichen in der Shell eingeben, aber nicht in Python im interaktiven Modus. Ich habe meine Standardcodierung bereits in "sitecustomize.py" auf "utf-8" geändert. –

+1

Es wird nicht empfohlen, das Standard-Codierungssystem zu ändern, da dadurch einige Bibliotheken beschädigt werden können. – KurzedMetal

+0

** Ändern Sie nicht die Standardcodierung. Was bedeutet 'sys importieren; print (sys.stdout.encoding) 'sag? –

3

Die readline-Bibliothek, die Python verwendet, um interaktive Eingabe zu lesen, akzeptiert keine ASCII-Zeichen, die vom Terminal gesendet werden. Dies bedeutet, dass entweder Ihr Terminalemulator die Zeichen in der UTF-8-Codierung nicht bereitstellt oder readline nicht für die Annahme von UTF-8-Eingaben konfiguriert ist.

Glücklicherweise wird readline von vielen populären Programmen verwendet, einschließlich der bash Shell, so dass es viele Informationen gibt, wie es funktioniert. Zum Beispiel from this article:

Wie erhalte ich UTF-8-Eingang richtig zu arbeiten?

  • In dem Terminal Inspector:
    • im Emulations-Abschnitt, die Escape-Nicht-ASCII-Zeichen Option deaktivieren.
    • Wählen Sie im Abschnitt Anzeige Unicode (UTF-8) als die Zeichensatzkodierung.
  • Fügen Sie die folgende Zeile in .profile:

    export LC_CTYPE=en_US.UTF-8 
    
  • Fügen Sie die folgenden Zeilen zu Ihrer .inputrc:

    set meta-flag on 
    set input-meta on 
    set output-meta on 
    set convert-meta off 
    
  • Änderungen übernehmen, indem Sie eine source ~/.profile und source ~/.inputrc tun.

+0

Dies löst dieses Problem leider auch nicht – Rmatt

Verwandte Themen