Как сделать так, чтобы дескриптор команды «меньше» UTF-8?

31

На моем терминале Mac печать UTF-8 в целом работает, но lessне работает правильно.

Так что это работает правильно:

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

но, добавив меньше, получится что-то вроде этого:

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

Как это можно исправить?

Для диагностики:

Я использую Mac OS 10.6.8. меньше версии 418, Терминал 2.1.2 (273.1).

Вывод моей локали такой:

$ 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"
user9474
источник

Ответы:

43

Хорошо, я нашел ответ после некоторого поиска в Google. Видимо, LESSCHARSETнужно установить так:

export LESSCHARSET=utf-8

Теперь lessу меня отлично работает.

user9474
источник
У меня была такая же проблема на CentOS. Эта линия также исправила это там.
Вим Deblauwe
9
Для меня то, что решило проблему, было использовать less -r(отображать «сырые» управляющие символы)
waldyrious
Это работает и в Debian 8, спасибо!
Lucaferrario
Кто-то должен принять этот ответ! Это решает проблему.
Ленсовет
2
less -rделает то же самое, но также правильно обрабатывает эмодзи, а export LESSCHARSET=utf-8это не так.
Ноа Суссман
6

Если вы видите некоторые символы Юникода less, но не можете lessотобразить смайлики, попробуйте lessперейти на более свежую версию. В Mac OS X я перешел с версии 458 на 481, и это исправило мою проблему (например, git logтеперь можно отображать эмодзи в сообщениях коммита).

Если у вас есть homebrew, вы можете меньше заменить систему новой версией, запустив ее brew install homebrew/dupes/less.

Люк Франкл
источник
Благодарность! С более новыми версиями homebrew вам просто нужно brew install lessполучить обновление.
Алекс Чиминиан
2

У меня работает с

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 является важным. Однако менее используемые правила странны: вместо того, чтобы извлекать кодировку из локали, она ищет строку «utf-8» (или несколько других возможностей) в своем имени. Так что вам нужно будет использовать LESSCHARSET, если вы хотите немного другая кодировка или если ваше название локали не соответствует предвзятым взглядам less.
Ричард Кеттвелл
1

Я прогуглил это и попробовал следующие переменные окружения, которые работали для меня:

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

Поскольку я нахожу LC_ALL в нескольких разных ответах, я думаю, что это правильный ответ. Но, возможно, не единственный правильный ответ, конечно, могут быть более правильные ответы на этот вопрос.

Во всяком случае, еще один поиск в Google дал мне это описание для переменной:

LC_ALL Эта переменная определяет значения для всех категорий локалей. Значение переменной среды LC_ALL имеет приоритет над любой из других переменных среды, начиная с LC_ (LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME) и переменной среды LANG.

источник: http://pubs.opengroup.org/onlinepubs/007908799/xbd/envvar.html

Приводит меня к мысли, что это языковая переменная, чтобы управлять ими всеми :)

Мелвин Лоос
источник
Пожалуйста, не стесняйтесь размещать lessномер версии.
Охотник на оленей
конечно, меньше 458 (регулярные выражения GNU)
Мелвин Лоос
0

Просто обновить вас [less][1]

Сделай это с варевом.

brew install homebrew/core/less
Ахмад Авайс
источник