Làm cách nào để tạo lệnh 'less' xử lý UTF-8?


31

Trên thiết bị đầu cuối Mac của tôi, in UTF-8 nói chung hoạt động, nhưng lesskhông hoạt động chính xác.

Vì vậy, điều này hoạt động chính xác:

$  echo -e '\xe2\x82\xac'   
€

nhưng đường ống vào ít hơn sẽ cho một cái gì đó như thế này:

$  echo -e '\xe2\x82\xac' | less  
<E2><82><AC>

Làm thế nào để sửa cái này?

Đối với chẩn đoán:

Tôi đang sử dụng Mac OS 10.6.8. ít phiên bản 418, Terminal 2.1.2 (273.1).

Đầu ra của miền địa phương của tôi là thế này:

$ locale
LANG="en_US.UTF-8"
LC_COLLATE="C"
LC_CTYPE="C"
LC_MESSAGES="C"
LC_MONETARY="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_ALL="C"

Câu trả lời:


43

Được rồi, tôi tìm thấy câu trả lời sau khi một số googling. Rõ ràng, LESSCHARSETcần phải được thiết lập như thế này:

export LESSCHARSET=utf-8

Bây giờ lesslàm việc tốt cho tôi.


Tôi đã có cùng một vấn đề trên CentOS. Dòng này cũng đã sửa nó ở đó.
Wim Deblauwe

9
Đối với tôi, những gì đã giải quyết vấn đề là sử dụng less -r(hiển thị các ký tự điều khiển "thô")
waldyrious

Điều này cũng hoạt động trong Debian 8, cảm ơn!
lucaferrario

Ai đó nên chấp nhận câu trả lời này! Nó giải quyết vấn đề.
lensovet

2
less -rlàm điều tương tự nhưng cũng xử lý biểu tượng cảm xúc một cách chính xác, điều export LESSCHARSET=utf-8này không.

6

Nếu bạn có thể thấy một số ký tự unicode less, nhưng không thể lesshiển thị biểu tượng cảm xúc, hãy thử nâng cấp lesslên phiên bản mới hơn. Trên Mac OS X, tôi đã chuyển từ phiên bản 458 sang 481 và điều đó đã khắc phục sự cố của tôi (ví dụ: git loggiờ đây có thể hiển thị biểu tượng cảm xúc trong thông điệp cam kết).

Nếu bạn có homebrew, bạn có thể thay thế hệ thống ít hơn bằng phiên bản mới hơn bằng cách chạy brew install homebrew/dupes/less.


Cảm ơn! Với các phiên bản mới hơn của homebrew, bạn chỉ cần brew install lessnâng cấp.
Alex Ciminian

2

Làm việc cho tôi với

LANG=
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL="en_US.UTF-8"

3
LC_CTYPE là một trong những quan trọng. Tuy nhiên, các quy tắc ít sử dụng rất kỳ quái: thay vì truy xuất mã hóa từ miền địa phương, nó tìm chuỗi "utf-8" (hoặc một vài khả năng khác) trong tên của nó. Vì vậy, bạn sẽ cần sử dụng LESSCHARSET nếu bạn muốn mã hóa khác hoặc nếu tên miền địa phương của bạn không khớp với các định kiến ​​ít hơn.
Richard Kettlewell

1

Tôi đã googled này và thử các biến môi trường sau đây làm việc cho tôi:

export LC_ALL=en_US.UTF-8
export LANG=en_us.UTF-8

Nhìn thấy khi tôi tìm thấy LC_ALL trong nhiều câu trả lời khác nhau, tôi nghĩ đây là câu trả lời đúng. Nhưng có lẽ không phải là câu trả lời đúng duy nhất, tất nhiên có thể có câu trả lời đúng hơn cho câu hỏi này.

Dù sao, một số googling khác đã cho tôi mô tả này cho biến:

LC_ALL Biến này xác định các giá trị cho tất cả các loại ngôn ngữ. Giá trị của biến môi trường LC_ALL được ưu tiên hơn bất kỳ biến môi trường nào khác bắt đầu bằng LC_ (LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME) và biến môi trường LANG.

nguồn: http://pub.opengroup.org/onlinepub/007908799/xbd/envvar.html

Dẫn đến tôi nghĩ đây là biến ngôn ngữ để thống trị tất cả :)


Xin vui lòng gửi lesssố phiên bản.
Deer Hunter

chắc chắn, ít hơn 458 (biểu thức chính quy GNU)
Melvin Loos

0

Chỉ cần cập nhật cho bạn [less][1]

Làm điều đó với bia.

brew install homebrew/core/less
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.