Teraz zmieniam kodowanie znaków mojego terminala gnome na „GBK” (domyślnie jest to UTF-8), ale jak mogę uzyskać wartość (kodowanie znaków) w moim Linuksie?
Te zmienne środowiskowe są używane przez aplikacje, które używają terminala do operacji we / wy. Sam emulator terminala nie ma o nich żadnej wiedzy, a jego aktualnie efektywne kodowanie znaków jest ustawieniem gdzieś w programie emulatora (element danych wewnątrz klasy libvte w przypadku GNOME Terminal).
JdeBP
1
sugerowana tutaj kolejność zmiennych nie jest dobra. bardziej kompletnym rozwiązaniem byłoby coś takiego: echo $ {LC_ALL: - $ {LC_CTYPE: - $ {LANG}}}. z drugiej strony, ustawiana zmienna nie gwarantuje, że są one prawidłowe, więc powinieneś trzymać się localeprogramu (jak widać w innych odpowiedziach tutaj).
Mike Frysinger
Jak powiedział @JdeBP, terminal nie używa localezmiennych środowiskowych do określenia swojego kodowania. Terminal może jednak pozwolić aplikacjom, które z nim współpracują, poznać jego kodowanie, ustawiając localezmienne środowiskowe. Na przykład, na MacOS można wybrać kodowanie terminala i ewentualnie ustawić localezmienne środowiskowe na zacisku starcie w Terminal> Preferences> Profiles> Advanced.
Maggyero,
97
locale polecenie bez argumentów wypisze wartości wszystkich odpowiednich zmiennych środowiskowych z wyjątkiem LANGUAGE.
To właśnie zadziałało dla mnie w systemie CentOS. Pokazał kodowanie systemu na podstawie aktualnych ustawień językowych. Ustawienia terminala używane do uzyskania dostępu do tej maszyny to inna historia i funkcja używanego klienta.
Ze wszystkich powyższych ofert jedyną sugestią, która działała na moim pudełku ze Slackware64 wer. 14.2, był ten fragment Pythona. Dzięki!
Thomas Altfather Good,
6
O ile wiem, nie.
Wskazania okolicznościowe z $LC_CTYPE, localei takie może wydawać się intrygujący, ale są one całkowicie oddzielone od kodującego aplikację terminala (właściwie emulatorze) dzieje się przy użyciu podczas wyświetlania znaków na ekranie.
Jedynym sposobem na pewne wykrycie kodowania jest wyprowadzenie czegoś, co jest tylko obecne w kodowaniu, np. äZrobienie zrzutu ekranu, przeanalizowanie tego obrazu i sprawdzenie, czy znak wyjściowy jest poprawny.
Odpowiedzi:
Terminal używa zmiennych środowiskowych, aby określić, którego zestawu znaków użyć, dlatego możesz to określić, patrząc na te zmienne:
lub
źródło
locale
programu (jak widać w innych odpowiedziach tutaj).locale
zmiennych środowiskowych do określenia swojego kodowania. Terminal może jednak pozwolić aplikacjom, które z nim współpracują, poznać jego kodowanie, ustawiająclocale
zmienne środowiskowe. Na przykład, na MacOS można wybrać kodowanie terminala i ewentualnie ustawićlocale
zmienne środowiskowe na zacisku starcie wTerminal
>Preferences
>Profiles
>Advanced
.locale
polecenie bez argumentów wypisze wartości wszystkich odpowiednich zmiennych środowiskowych z wyjątkiem LANGUAGE.Aktualne kodowanie:
Dostępne lokalizacje:
Dostępne kodowania:
źródło
Sprawdź kodowanie i język:
Pobierz wszystkie języki:
Zmień na pt_PT.utf8:
źródło
Jeśli masz Pythona:
źródło
O ile wiem, nie.
Wskazania okolicznościowe z
$LC_CTYPE
,locale
i takie może wydawać się intrygujący, ale są one całkowicie oddzielone od kodującego aplikację terminala (właściwie emulatorze) dzieje się przy użyciu podczas wyświetlania znaków na ekranie.Jedynym sposobem na pewne wykrycie kodowania jest wyprowadzenie czegoś, co jest tylko obecne w kodowaniu, np.
ä
Zrobienie zrzutu ekranu, przeanalizowanie tego obrazu i sprawdzenie, czy znak wyjściowy jest poprawny.Więc nie, niestety nie jest to możliwe.
źródło
Aby zobaczyć aktualne informacje o lokalizacji użyj
locale
polecenia. Poniżej znajduje się przykład na RHEL 7.8źródło