Tôi đang cố gắng tìm hiểu cách $LANG
biến hoạt động với gnome-terminal (và tùy chọn tùy chọn mã hóa ký tự của nó). Tôi đã sử dụng iso8859-1 (latin1) làm bộ ký tự chính của mình và tất cả tên tệp của tôi được mã hóa như vậy.
Đối với các thử nghiệm sau đây, tôi sẽ thực hiện ls -l
một thư mục với các ký tự có dấu tiếng Tây Ban Nha trong tên tệp của họ:
Trường hợp 1:
- gnome-terminal được cấu hình cho ISO-8859-1
LANG
được đặt thành "en_US-iso8859-1"- Kết quả: Tôi thấy tất cả các tệp chính xác
Trường hợp 2
- gnome-terminal được cấu hình cho UTF-8
LANG
được đặt thành "en_US-iso8859-1"- Kết quả: Tôi thấy các ký tự rác cho tất cả các ký tự Tây Ban Nha. Điều này được mong đợi khi tôi thay đổi mã hóa ký tự cho thiết bị đầu cuối
Trường hợp # 3:
- gnome-terminal được cấu hình cho ISO-8859-1
LANG
được đặt thành "en_US-UTF-8"- Kết quả: Tôi thấy các ký tự rác cho tất cả các ký tự Tây Ban Nha.
Tại sao trong trường hợp cuối cùng này, tôi thấy các nhân vật bị cắt xén? Không phải đầu ra của ls gửi tên tệp thẳng đến gnome-terminal như chúng phải không? Và vì gnome-terminal được cấu hình cho ISO-8859-1, tôi sẽ mong họ nhìn đúng.
Trong một khoảnh khắc tôi nghĩ rằng, có lẽ, có lẽ bash đang xem xét $LANG
biến của tôi và thực hiện một số chuyển đổi. Sau đó, tôi chuyển thiết bị đầu cuối của mình sang UTF-8 nhưng tôi vẫn không thể nhìn thấy các ký tự đúng. Tôi thậm chí đã chuyển đầu ra của ls sang xxd và thật ngạc nhiên tôi vẫn thấy các tệp được mã hóa như chúng là: ISO-8859-1.
Để kết thúc: Nếu danh sách của tôi chứa các ký tự ISO-8859-1 và trình giả lập thiết bị đầu cuối của tôi được định cấu hình cho cùng một mã hóa ký tự: Ai đang thực hiện chuyển đổi khi LANG
được đặt khác?
Cảm ơn vì bất kì sự giúp đỡ nào của bạn.
Craconia