419 Stimmen

Python Locale-Fehler: nicht unterstützte Locale-Einstellung

Warum erhalte ich den folgenden Fehler, wenn ich dies in Python tue:

>>> import locale
>>> print str( locale.getlocale() )
(None, None)
>>> locale.setlocale(locale.LC_ALL, 'de_DE')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/locale.py", line 531, in setlocale
    return _setlocale(category, locale)
locale.Error: unsupported locale setting

Dies gilt auch für andere Länder wie Frankreich oder Italien. Ich benutze Ubuntu 11.04.

Update: Die folgenden Schritte haben nichts ergeben:

dpkg-reconfigure locales
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_CTYPE = "UTF-8",
    LANG = (unset)
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory

739voto

Muhammad Hassan Punkte 13386

Führen Sie folgende Befehle aus

export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales

Sie wird das Problem lösen.

Achten Sie darauf, dass die .UTF-8 Teil der tatsächlichen Syntax, die in der Ausgabe von locale -a z.B.. .utf8 auf einigen Systemen.

254voto

Fatemeh Abdollahei Punkte 3030

Nach Angaben von dieser Link wird durch Eingabe dieses Befehls gelöst:

export LC_ALL=C

244voto

Bakuriu Punkte 91990

Sie haben wahrscheinlich keine de_DE Gebietsschema verfügbar.

Sie können eine Liste der verfügbaren Gebietsschemata mit dem Befehl locale -a Befehl. Zum Beispiel auf meinem Rechner:

$ locale -a
C
C.UTF-8
en_AG
en_AG.utf8
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_IN.utf8
en_NG
en_NG.utf8
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZM
en_ZM.utf8
en_ZW.utf8
it_CH.utf8
it_IT.utf8
POSIX

Beachten Sie, dass Sie, wenn Sie das Gebietsschema auf it_IT müssen Sie auch die .utf8 :

>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'it_IT')   # error!
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/locale.py", line 539, in setlocale
    return _setlocale(category, locale)
locale.Error: unsupported locale setting
>>> locale.setlocale(locale.LC_ALL, 'it_IT.utf8')
'it_IT.utf8'

Um ein neues Gebietsschema zu installieren, verwenden Sie:

sudo apt-get install language-pack-id

wobei id ist der Sprachcode (entnommen aus aquí )

Nach installiert haben, sollten Sie den Rat von Julien Palard befolgen und die Gebietsschemata mit neu konfigurieren:

sudo dpkg-reconfigure locales

56voto

Ayush Vatsyayan Punkte 2389

Eine der oben genannten Antworten liefert die Lösung:

export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
sudo dpkg-reconfigure locales

Das Problem bei der obigen Lösung ist, dass sie auf der Linux-Shell durchgeführt werden muss. Wenn Sie jedoch Ihren Code für die Arbeit auf dem Client-Rechner bereitstellen, ist dies ein schlechter Ansatz. Ich habe auch versucht, die oben genannten Befehle mit os.system() auszuführen, aber es funktioniert immer noch nicht.

Die Lösung, die bei mir funktioniert hat, ist

locale.setlocale(locale.LC_ALL,'en_US.UTF-8')

36voto

lorenzofeliz Punkte 597

Eine dauerhaftere Lösung wäre es, die fehlenden Werte in der durch den Befehl angezeigten Ausgabe zu ergänzen: locale

Ausgabe von locale ist:

 $ locale
LANG=en_US.utf8
LANGUAGE=
LC_CTYPE="en_US.utf8"
LC_NUMERIC=es_ES.utf8
LC_TIME=es_ES.utf8
LC_COLLATE="en_US.utf8"
LC_MONETARY=es_ES.utf8
LC_MESSAGES="en_US.utf8"
LC_PAPER=es_ES.utf8
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT=es_ES.utf8
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=

Um die fehlenden Werte aufzufüllen, bearbeiten Sie ~/.bashrc :

 $ vim ~/.bashrc

Fügen Sie die folgenden Zeilen nach dem obigen Befehl ein (angenommen, Sie möchten en_US.UTF-8 als Sprache verwenden):

export LANGUAGE="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"

Wenn diese Datei schreibgeschützt ist, müssen Sie die Schritte befolgen, die von Der GeekyBoy . Die Antwort wird gegeben durch Dr. Beco in Superuser enthält Einzelheiten über das Speichern von schreibgeschützten Dateien.

Nach dem Speichern der Datei tun:

$ source ~/.bashrc

Jetzt werden Sie nicht mehr mit demselben Problem konfrontiert sein.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X