Cách nhận mã hóa ký tự của thiết bị đầu cuối


Câu trả lời:


108

Thiết bị đầu cuối sử dụng các biến môi trường để xác định bộ ký tự nào sẽ sử dụng, do đó bạn có thể xác định nó bằng cách xem các biến đó:

echo $LC_CTYPE

hoặc là

echo $LANG

4
Các biến môi trường này được sử dụng bởi các ứng dụng đang sử dụng thiết bị đầu cuối cho I / O. Bản thân trình giả lập đầu cuối không biết gì về chúng và mã hóa ký tự hiệu quả hiện tại của nó là cài đặt ở đâu đó trong chương trình giả lập (một thành viên dữ liệu bên trong lớp libvte trong trường hợp của GNOME Terminal).
JdeBP

thứ tự của các biến được đề xuất ở đây là không tốt. một giải pháp hoàn chỉnh hơn sẽ giống như: echo $ {LC_ALL: - $ {LC_CTYPE: - $ {LANG}}}. thì một lần nữa, biến đang được đặt không đảm bảo rằng chúng hợp lệ, vì vậy bạn nên tuân theo localechương trình (như đã thấy trong các câu trả lời khác ở đây).
Mike Frysinger

Như @JdeBP đã nói, thiết bị đầu cuối không sử dụng các localebiến môi trường để xác định mã hóa của nó. Tuy nhiên, thiết bị đầu cuối có thể cho các ứng dụng tương tác với nó biết mã hóa của nó bằng cách thiết lập các localebiến môi trường. Ví dụ, trên hệ điều hành MacOS bạn có thể chọn mã hóa thiết bị đầu cuối, và tùy chọn thiết lập các localebiến môi trường lúc khởi động thiết bị đầu cuối trong Terminal> Preferences> Profiles> Advanced.
Maggyero

97

locale lệnh không có đối số sẽ in ra các giá trị của tất cả các biến môi trường có liên quan ngoại trừ LANGUAGE.

Đối với mã hóa hiện tại:

locale charmap

Đối với các ngôn ngữ có sẵn:

locale -a

Đối với các bảng mã có sẵn:

locale -m

1
Đây là những gì làm việc cho tôi trên hệ thống CentOS. Nó cho thấy mã hóa hệ thống dựa trên cài đặt ngôn ngữ hiện tại. Cài đặt thiết bị đầu cuối được sử dụng để truy cập máy đó là một câu chuyện khác và một chức năng của máy khách đang được sử dụng.
Phil DD

45

Kiểm tra mã hóa và ngôn ngữ:

$ echo $LC_CTYPE
ISO-8859-1
$ echo $LANG
pt_BR

Nhận tất cả các ngôn ngữ:

$ locale -a

Thay đổi thành pt_PT.utf8:

$ export LC_ALL=pt_PT.utf8 
$ export LANG="$LC_ALL"

16

Nếu bạn có Python:

python -c "import sys; print(sys.stdout.encoding)"

1
Trong số tất cả các dịch vụ ở trên, gợi ý duy nhất hoạt động trên hộp Slackware64 v. 14.2 của tôi là đoạn mã python này. Cảm ơn!
Thomas Altfather Good

6

Theo hiểu biết của tôi, không.

Các dấu hiệu đáng kể từ $LC_CTYPE,locale và như vậy có vẻ hấp dẫn, nhưng chúng hoàn toàn tách biệt với mã hóa ứng dụng đầu cuối (thực sự là một trình giả lập) đang sử dụng khi hiển thị các ký tự trên màn hình.

Họ chỉ có cách duy nhất để phát hiện mã hóa chắc chắn là xuất một thứ chỉ có trong mã hóa, ví dụ: ä chụp ảnh màn hình, phân tích hình ảnh đó và kiểm tra xem ký tự đầu ra có đúng không.

Vì vậy, không, nó không thể, thật đáng buồn.


0

Để xem thông tin ngôn ngữ hiện tại, hãy sử dụng localelệnh. Dưới đây là một ví dụ trên RHEL 7.8

[usr@host ~]$ locale
LANG=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=
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.