Ich verwende Arch Linux und folge den Anweisungen im Wiki zum Festlegen meines Gebietsschemas.
Nahezu jedes Programm, das ausgeführt wird, beklagt sich über das Gebietsschema - sogar locale
. Es sieht aus wie das:
% locale
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=en-US
LC_TIME=en-US
LC_COLLATE="POSIX"
LC_MONETARY=en-US
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT=en-US
LC_IDENTIFICATION="POSIX"
LC_ALL=
oder:
% perl
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_TIME = "en-US",
LC_NUMERIC = "en-US",
LC_MONETARY = "en-US",
LC_MEASUREMENT = "en-US",
LC_CTYPE = "en_US.UTF-8",
LANG = (unset)
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C")
Etwas verwirrend ist, dass das /etc/locale.gen
mehrere Beispiele hat; Alle UTF-8-Zeilen haben "something.UTF-8" und laufen locale-gen
Shows, en_US.UTF-8... done
während es läuft, aber locale -a
das soll Ihnen die verfügbaren Locales-Shows zeigen en_US.utf8
. Ich habe verschiedene Kombinationen beider Formate in /etc/locale-gen
und LOCALE=
in ausprobiert /etc/rc.conf
, aber nichts hat das Problem behoben.
Zusätzliche Information:
% locale -a
C
POSIX
en_US
en_US.iso88591
en_US.utf8
Bruce Edigers Vorschlag, zu setzen LANG=C
und zu LC_ALL=en_US.UTF-8
arbeiten (in der Tat, das Setzen hat es LC_ALL
behoben, das Setzen LANG
war egal), aber ich würde gerne wissen, was passiert. Laut SUS überschreibt LC_ALL alle anderen LC_ * -Variablen, wenn es gesetzt und nicht null ist. In meinem System ist es festgelegt, aber es ist null, daher sollte es ignoriert werden und stattdessen sollten andere Werte verwendet werden. Das ist nicht , was passiert ist , scheint es , dass Anwendungen fordern setlocale
mit LC_ALL
einer immer NULL
wieder, und einen Fehler zu generieren, auch wenn andere Anrufe setlocale
eine gute String zurück.
Hier ist der Anfang eines ltrace
von locale
(scrollen Sie nach rechts, um Funktionsrückgabewerte zu sehen)
% ltrace locale
(0, 0, 0, -1, 0x7f5c1ae44510) = 0x7f5c1ae47140
__libc_start_main(0x401d70, 1, 0x7fff7c8cfbf8, 0x404610, 0x4046a0 <unfinished ...>
setlocale(0, "") = "en_US.UTF-8"
setlocale(5, "") = "en_US.UTF-8"
textdomain("libc") = "libc"
argp_parse(0x607280, 1, 0x7fff7c8cfbf8, 0, 0x7fff7c8cfad4) = 0
setlocale(6, "") = NULL
dcgettext(0, 0x405aa8, 5, 0, 0) = 0x405aa8
error(0, 2, 0x405aa8, 1, 0locale: Cannot set LC_ALL to default locale: No such file or directory)
quelle
locale -a
?.utf8
inLOCALE
und verwenden solltenLC_*
, aber anscheinend.UTF-8
funktioniert es auch hier ... Was en-US betrifft: Erscheint es (ohne.utf8
) inlocale -a
?export LANG=C
undexport LC_ALL=en_US.UTF-8
und schau was passiert. Mein Arch Linux-Laptop hatLOCALE="en_US.UTF-8"
/etc/rc.conf und ich kann nicht herausfinden, wo mein Laptop LANG = C setzt./etc/locale.conf
? Es sieht so aus, als hätten Sie versehentlichLANG=en-US
(mit Bindestrich) stattLANG=en_US
(mit Unterstrich) geschrieben./etc/locale.gen
wäre auch nützlich.Antworten:
Es fehlt eine Datei, mit der das Gebietsschema standardmäßig festgelegt wird, wenn nicht
$LANG
oder$LC_ALL
(oder nur im Einzelnen$LC_whatever
) festgelegt wurde.In älteren Versionen ist es / usr / lib / locale / locale-archive. Da GNU / Linux chaotisch ist, sollten Sie mit strace bestimmen, welche Dateien in den auf Ihrem Computer verwendeten Versionen erwartet werden:
---------------------- Kommentare hinzugefügt 1 Tag später:
"ltrace -S" sollte in Ordnung sein, da es Syscalls anzeigt.
Andernfalls ist "ltrace" nicht sehr hilfreich (dh es ist kontraproduktiv gegenüber "strace"), da nur die obersten Aufrufe angezeigt werden. Diese liegen auf der Hand (setlocale (3)), während das eigentliche Problem in libc auftritt.
Es klingt wie Sie die haben rohe locale Daten installiert, da en_US.UTF-8 funktioniert.
Wenn ja, sollte so etwas Ihr Problem beheben und einen systemweiten Standard festlegen:
quelle
sudo localedef -f UTF-8 -i en_US en_US.UTF-8
funktioniert auf Raspbian 2018-11-13 Lite.Ich hatte das gleiche Problem, nachdem ich es
/etc/locale.conf
erst heute eingerichtet hatte (im Zusammenhang mit den letzten Änderungen an/etc/rc.conf
. In meinem Fall stellte sich heraus, dass die Gebietsschemas nicht installiert waren.Überprüfen Sie
/etc/locale.gen
. Alle Gebietsschemas, auf die Ihre Umgebungsvariablen verweisen, müssen dort aktiviert (dh nicht auskommentiert) sein. Nachdem Sie Ihre Änderungen vorgenommen haben, führen Siesudo locale-gen
den Befehl aus, um die ausgewählten Ländereinstellungen zu installieren.quelle
Der folgende Link löst mein Problem:
Es wird eine Datei generiert
/etc/locale.conf
, die dieses Problem behebtquelle
Ich hatte vor kurzem ähnliche Probleme, alle Unicode-Dateinamen wurden falsch angezeigt, als ich versehentlich die Datei 'LOCALE = en_US.utf8' in entfernte
/etc/rc.conf
. Also habe ich das Boot-Skript überprüft:Einfache Lösung ist sowohl überprüfen
DAEMON_LOCALE
undLOCALE
in/etc/rc.conf
, stellen Sie sicher , dass der erste war nicht ,no
und die zweite war nicht leer.quelle
Vielleicht ist eine Ihrer Einstellungen ungültig? Dies sind meine Ländereinstellungen als Referenz. Sie verursachen keine Fehler (KUbuntu 12.04):
quelle