Warum unterbricht die Einstellung „LANG=C“ die Konsolenanmeldung unter CentOS 7?

Warum unterbricht die Einstellung „LANG=C“ die Konsolenanmeldung unter CentOS 7?

Normalerweise stelle ich alle meine Gebietsschemaeinstellungen auf „C“. Das ist, was ich gewohnt bin. Ich lssortiere die Dinge gern so, wie ich es seit Jahrzehnten gewohnt bin.

Stellen Sie sich also meine Überraschung und Bestürzung vor, als ich LANG=Cmich einloggte .bashrcund nun feststellte, dass kein Fenstermanager da war.

Kann das behoben werden?

Aktualisieren:Das kann sein LC_ALL=C. Einer der beiden macht es kaputt. LC_COLLATE=Cbehebt einige Dinge, aber nicht andere.

-E

Linux xxxx 3.10.0-957.10.1.el7.x86_64 #1 SMP Mon Mar 18 15:06:45 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

Antwort1

Eine der für das System relevanten Funktionen, die von den Gebietsschemaeinstellungen betroffen sind, ist dieTextentschlüsselung, oder der „Zeichensatz“ oder die „Codepage“ – übernommen aus dem Parameter LC_CTYPE. Obwohl die Textkodierung in vielen Situationen durch Spezifikation vorgegeben ist (z. B. sind D-Bus-Protokollzeichenfolgen immer UTF-8), gibt es auch viele Stellen, an denen die Kodierung nicht angegeben ist und aus der aktuellen Systemumgebung übernommen werden muss.

Insbesondere,Dateinamenwerden häufig entsprechend der aktuellen lokalen Textkodierung angezeigt. In Python 3 geschriebene Programme verwenden beispielsweise die aktuelle lokale Kodierung, wenn das Programm vergisst, etwas anderes anzugeben.

Das Gebietsschema 'C' impliziert eine 7-Bit-ASCII-Textkodierung (ANSI_X3.4-1968), und ein Teil Ihres Problems könnte darin liegen, dass zwar viele Programme (im Allgemeinen solche, die in C geschrieben sind) dies so interpretieren, dass beliebige 8-Bit-Werte zulässig sind, es aber auch viele Programme gibt, die eine viel strengere Interpretation haben undablehnenalle Werte über 127 (also nicht ASCII) als ungültig. Es kann sein, dass ein Dekodierungsfehler durch einen Dateinamen, einen Konfigurationsparameter oder eine andere Textdatei verursacht wird.

Tatsächlich finden Sie mittlerweile sogar Programme, die sich schlichtweg weigern, mit einem Gebietsschema zu arbeiten, das die ASCII-Textkodierung angibt – einige davon erfordern ausdrücklich UTF-8 (wie etwa Gnome-Terminal) und andere erfordern jede 8-Bit-Kodierung.

Wenn Ihre Distribution den Patch „C.UTF-8“ auf libc anwendet, verwenden Sie ihn:

LANG=C.UTF-8

Wenn nicht, verwenden Sie eine der folgenden Möglichkeiten:

LANG=en_US.UTF-8
LC_TIME=C
LC_COLLATE=C
LC_MESSAGES=C
LANG=C
LC_CTYPE=en_US.UTF-8

(Sie können locale charmapnachsehen, welche Codepage gemäß den aktuellen Umgebungsvariablen gültig ist – in beiden Fällen sollte UTF-8 angezeigt werden. Wenn Sie die dritte Option wählen, achten Sie auf fehlerhafte Programme, die direkt auf $LANG schauen, anstattnl_langinfo(CODESATZ)wie sie es sollten.)

verwandte Informationen