Wie kann der Befehl 'less' UTF-8 verarbeiten?

31

Auf meinem Mac-Terminal funktioniert das Drucken von UTF-8 im Allgemeinen, aber das lessfunktioniert nicht richtig.

Das funktioniert also richtig:

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

Aber wenn man es in weniger leitet, sieht es so aus:

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

Wie kann das behoben werden?

Zur Diagnose:

Ich verwende Mac OS 10.6.8. weniger Version 418, Terminal 2.1.2 (273.1).

Die Ausgabe meines Gebietsschemas lautet wie folgt:

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

Antworten:

43

Okay, ich habe die Antwort nach einigem googeln gefunden. Anscheinend LESSCHARSETmuss so eingestellt werden:

export LESSCHARSET=utf-8

Jetzt lessfunktioniert gut für mich.

user9474
quelle
Ich hatte das gleiche Problem auf CentOS. Diese Leitung hat es auch dort behoben.
Wim Deblauwe
9
Für mich war das Problem mit less -r(Anzeige "roher" Steuerzeichen)
waldyrious
Dies funktioniert auch in Debian 8, danke!
Lucaferrario
Jemand sollte diese Antwort akzeptieren! Es löst das Problem.
Lensovet
2
less -rmacht das selbe aber handhabt auch emojis richtig, was export LESSCHARSET=utf-8aber nicht geht.
Noah Sussman
6

Wenn Sie einige Unicode-Zeichen in sehen, Emoji lessjedoch nicht lessanzeigen können, führen Sie ein Upgrade lessauf eine neuere Version durch. Unter Mac OS X bin ich von Version 458 auf 481 übergegangen und das hat mein Problem behoben (zum Beispiel git logkann jetzt Emoji in Commit-Nachrichten angezeigt werden).

Wenn Sie Homebrew haben, können Sie das System weniger durch eine neuere Version ersetzen, indem Sie ausführen brew install homebrew/dupes/less.

Luke Francl
quelle
Vielen Dank! Bei neueren Versionen von Homebrew müssen Sie nur brew install lessdas Upgrade erhalten.
Alex Ciminian
2

Funktioniert bei mir mit

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"
Platzhirsch
quelle
3
LC_CTYPE ist der wichtige. Die Regeln, die weniger verwendet werden, sind jedoch bizarr: Anstatt die Codierung aus dem Gebietsschema abzurufen, wird im Namen nach der Zeichenfolge "utf-8" (oder einigen anderen Möglichkeiten) gesucht andere Kodierung oder wenn der Name Ihres Gebietsschemas nicht mit den Vorurteilen von less übereinstimmt.
Richard Kettlewell
1

Ich habe das gegoogelt und die folgenden Umgebungsvariablen ausprobiert, die für mich funktionierten:

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

Da ich den LC_ALL in mehreren verschiedenen Antworten finde, denke ich, dass dies der richtige ist. Aber vielleicht nicht die einzig richtige Antwort, es könnte natürlich richtigere Antworten auf diese Frage geben.

Noch ein bisschen googeln gab mir diese Beschreibung für die Variable:

LC_ALL Diese Variable bestimmt die Werte für alle Gebietsschemakategorien. Der Wert der Umgebungsvariablen LC_ALL hat Vorrang vor allen anderen Umgebungsvariablen, die mit LC_ (LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONETARY, LC_NUMERIC, LC_TIME) und der Umgebungsvariablen LANG beginnen.

Quelle: http://pubs.opengroup.org/onlinepubs/007908799/xbd/envvar.html

Führe mich zu der Annahme, dass dies die Sprachvariable ist, die sie alle regiert :)

Melvin Loos
quelle
Bitte geben Sie lessdie Versionsnummer an.
Deer Hunter
sicher, weniger 458 (GNU reguläre Ausdrücke)
Melvin Loos
0

Aktualisiere dich einfach [less][1]

Mach es mit brauen.

brew install homebrew/core/less
Ahmad Awais
quelle