Jak sprawić, by polecenie „mniej” obsługiwało UTF-8?


31

Na moim terminalu Mac drukowanie UTF-8 działa ogólnie, ale lessnie działa poprawnie.

Więc to działa poprawnie:

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

ale przekazanie go do less daje coś takiego:

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

Jak to może zostać naprawione?

Do diagnostyki:

Używam Mac OS 10.6.8. mniej wersja 418, Terminal 2.1.2 (273.1).

Dane wyjściowe moich ustawień regionalnych są następujące:

$ 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"

Odpowiedzi:


43

Dobra, znalazłem odpowiedź po jakimś googlowaniu. Najwyraźniej LESSCHARSETnależy ustawić w ten sposób:

export LESSCHARSET=utf-8

Teraz lessdziała dobrze dla mnie.


Miałem ten sam problem na CentOS. Ta linia również to naprawiła.
Wim Deblauwe,

9
Dla mnie tym, co rozwiązało problem, było użycie less -r(wyświetlanie „surowych” znaków kontrolnych)
waldyrious 15.08.16

Działa to również w Debianie 8, dzięki!
lucaferrario,

Ktoś powinien zaakceptować tę odpowiedź! To rozwiązuje problem.
lensovet

2
less -rrobi to samo, ale również poprawnie obsługuje emoji, co export LESSCHARSET=utf-8nie.
Noah Sussman

6

Jeśli widzisz niektóre znaki Unicode less, ale nie możesz lesswyświetlić emoji, spróbuj uaktualnić lessdo nowszej wersji. W systemie Mac OS X przeszedłem z wersji 458 na 481 i to rozwiązało mój problem (na przykładgit log teraz mogę wyświetlać emoji w komunikatach zatwierdzania).

Jeśli masz homebrew, możesz rzadziej zastąpić system nowszą wersją, uruchamiając brew install homebrew/dupes/less.


Dzięki! W przypadku nowszych wersji Homebrew wystarczy brew install lessuaktualnić.
Alex Ciminian

2

Działa dla mnie z

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 jest ważny. Jednak zasady, których mniej używa, są dziwaczne: zamiast pobierać kodowanie z ustawień regionalnych, szuka w swojej nazwie ciągu „utf-8” (lub kilku innych możliwości), więc jeśli chcesz, musisz użyć LESSCHARSET inne kodowanie lub jeśli nazwa twojego regionu nie pasuje do wcześniejszych założeń.
Richard Kettlewell,

1

Poszukałem go i wypróbowałem następujące zmienne środowiskowe, które działały dla mnie:

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

Widząc, jak znajduję LC_ALL w wielu różnych odpowiedziach, myślę, że to jest poprawna. Ale może nie jedyna prawidłowa odpowiedź, oczywiście mogą istnieć bardziej poprawne odpowiedzi na to pytanie.

W każdym razie trochę googlowania dało mi ten opis zmiennej:

LC_ALL Ta zmienna określa wartości dla wszystkich kategorii ustawień narodowych. Wartość zmiennej środowiskowej LC_ALL ma pierwszeństwo przed dowolną inną zmienną środowiskową rozpoczynającą się od LC_ (LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME) i zmiennej środowiskowej LANG.

źródło: http://pubs.opengroup.org/onlinepubs/007908799/xbd/envvar.html

Skłania mnie do myślenia, że ​​to zmienna językowa, która rządzi nimi wszystkimi :)


Możesz opublikować lessnumer wersji.
Deer Hunter

jasne, mniej 458 (wyrażenia regularne GNU)
Melvin Loos

0

Po prostu zaktualizuj [less][1]

Zrób to za pomocą naparu.

brew install homebrew/core/less
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.