Câu trả lời:
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
locale
chương trình (như đã thấy trong các câu trả lời khác ở đây).
locale
biế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 locale
biế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 locale
biến môi trường lúc khởi động thiết bị đầu cuối trong Terminal
> Preferences
> Profiles
> Advanced
.
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
Nếu bạn có Python:
python -c "import sys; print(sys.stdout.encoding)"
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.
Để xem thông tin ngôn ngữ hiện tại, hãy sử dụng locale
lệ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=