
Ich habe einen NGINX -> UWSGI -> Django(Python)-Stack auf einem Ubuntu AMI auf Amazon EC2 installiert. Beim Zugriff auf eine Datei mit Unicode-Zeichen im Namen ist ein Problem aufgetreten. Die genaue Ausgabe der Django-App (Mezzanine) lautet
Es wurde versucht, auf eine Datei zuzugreifen, deren Pfad Unicode-Zeichen enthält, aber das aktuelle Gebietsschema unterstützt UTF-8 nicht. Möglicherweise müssen Sie „LC_ALL“ auf einen korrekten Wert setzen, z. B. „en_US.UTF-8“.
Wenn ich den Befehl jetzt ausführe, locale
lautet die Ausgabe:
LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8
Für mich sieht dort alles gut aus, also habe ich als Nächstes etwas Code hinzugefügt, um die Gebietsschemaeinstellungen im Codeabschnitt auszudrucken, der den Fehler generiert.
Das Ergebnis davon ist:
locale.getdefaultlocale() = (None, None)
locale.getpreferredencoding() = 'ANSI_X3.4-1968'
sys.getdefaultencoding() = 'ascii'
sys.getfilesystemencoding() = 'ANSI_X3.4-1968'
Das sieht also falsch aus, aber ich bin nicht sicher, wie ich es beheben kann. Wenn ich denselben Code in einer Python-Shell ausführe, sieht alles viel besser aus.
locale.getdefaultlocale() = ('en_US', 'UTF-8')
locale.getpreferredencoding() = 'UTF-8'
sys.getdefaultencoding() = 'ascii'
sys.getfilesystemencoding() = 'UTF-8'
Ich denke also nur, dass irgendwo im nginx- und uwsgi-Teil das Gebietsschema nicht richtig eingestellt ist. Gibt es eine Möglichkeit, einen von beiden zu zwingen, ein bestimmtes Gebietsschema zu verwenden? Oder könnte es etwas mit dem Benutzer zu tun haben? Es ist ein anderer Benutzer, der nginx und uwsgi ausführt, als der, den ich zum Ausführen dieser Befehle in der Shell verwendet habe.