Warum funktionieren ANSI-Symbole in PuTTY / Debian nicht?

6706
Hubro

Die großartige Anwendung tree, die ich in Debian installiert habe apt-get install tree, hat die Möglichkeit, ihre Ausgabe mit ANSI-Grafik zu zeichnen. Ihre Ausgabe sieht jetzt so aus:

. tqq node_modules x tqq Kaffee-Skript x tqq eco x tqq express x tqq für immer x mqq-Stift tqq package.json mqq src mqq daemontest.coffee 

Das ist offensichtlich falsch. Dies sind meine LANG=en_GB.UTF-8 UTF-8und LC_ALL=Cenv-Variablen. PuTTY erwartet auch UTF-8. Wenn ich PuTTY in "Schriftkodierung verwenden" ändere, dann tree -Asieht es richtig aus, npm listbricht jedoch ab und sieht folgendermaßen aus:

â € œâ € â € â € œ coffee-script@1.2.0 ”ââ â â ”eco eco@1.1.0-rc-3 â € â € œâ € œ strscan@1.0.1 â "œ" "" express@2.5.5 â “‚ â “â € œ â € ¢ connect@1.8.5 â "," "" "" formidable@1.0.8 â € “â € œâ € œ mime@1.2.4 ”â â â m mkdirp@0.0.7 â "‚ "" "" "qs@0.4.0 ... 

Alle diese Sachen sollten korrekt funktionieren, also vermute ich, dass meine Einstellungen irgendwo falsch sind. Könnte mir jemand helfen, genau wo zu stimmen?


EDIT: Mein envjetzt sieht so aus. Problem ist immer noch da

root @ chu: ~ # env TERM = Kitt SHELL = / bin / bash SSH_CLIENT = ** zensiert ** SSH_TTY = / dev / pts / 1 USER = root LS_COLORS = rs = ** Wegen Textwand entfernt ** PYTHONBREW_ROOT = / usr / local / pythonbrew MAIL = / var / mail / root PATH = / usr / local / pythonbrew / bin: / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin PWD = / root LANG = de_DE.UTF-8 SHLVL = 1 HOME = / root LANGUAGE = de_US: de LS_OPTIONS = - color = auto PYTHONPATH =: / root / pymodules LOGNAME = root SSH_CONNECTION = ** zensiert ** _ = / usr / bin / env 
6

1 Antwort auf die Frage

9
grawity

Das erste Problem ist, dass Sie $ LC_ALL auf gesetzt habenC . Wenn Sie $ LC_ALL festlegen, werden alle anderen Gebietsschemaeinstellungen einschließlich $ LANG überschrieben. Da das Gebietsschema "C" ISO-8859-1 verwendet, ist treedie Verfügbarkeit von Unicode nicht bekannt, und es wird versucht, zur VT100-Grafikcodepage zu wechseln (es gibt vier umschaltbare Codepages), was PuTTY ablehnt, wenn UTF-8 erwartet wird. Um dies zu beheben, stoppen in Ihrem environ Einstellung LC_ALL und treewird Unicode Grafiken verwenden.

Das zweite Problem ist, dass Ihre $ LANG-Variable falsch ist - Sie müssen den Zeichensatz nicht zweimal angeben. Stellen Sie LANG=en_GB.UTF-8das Problem ein.

Das dritte Problem ist, dass Sie die tree Verwendung von VT100-Grafiken erzwingen . Verwenden Sie die -AOption nicht.

Lassen Sie PuTTY auch für UTF-8 konfiguriert.

( npmWird nicht durch das, weil es ist fest einprogrammiert unabhängig von locale Unicode Grafiken zu verwenden.)

Hey danke für eine brillante Antwort, aber ich habe ein paar Probleme damit. Zunächst habe ich die LC_ALL- oder LANG-Variablen nie berührt. Ich weiß nicht, wo sie eingestellt sind, und ich weiß nicht, wie ich sie löschen oder ändern soll. Könnten Sie das etwas näher erläutern? Vielen Dank! Hubro vor 12 Jahren 0
@Codemonkey: Überprüfen Sie zuerst Ihre Shell-Startskripts. Wenn Sie * bash * verwenden, dann grep LC_ALL ~ / .profile ~ / .bash_profile ~ / .bash_login ~ / .bashrc / etc / profile /etc/profile.d/* / etc / * bashrc / etc / environ * / etc / default / locale` - kopiere / füge das ein :) grawity vor 12 Jahren 0
Ja, ich habe die LC_ALL-Deklaration auch bei der LANG gefunden. Ich habe die LC_ALL entfernt und LANG bearbeitet. Die env-Ausgabe wird in meiner Frage bearbeitet, da tree immer noch "tqq" und "mqq" anstelle von ANSI-Grafiken schreibt Hubro vor 12 Jahren 0
@Codemonkey: 1) Laufen Sie `Baum` oder` Baum -A`? Verwenden Sie * nicht * den ANSI-Modus. Führen Sie einfach "tree" aus und lassen Sie stattdessen Unicode verwenden. 2) Zeigt "locale -a" "en_DE.UTF-8" in der Liste an? grawity vor 12 Jahren 0
`locale -a`: http://pastebin.com/Kzttvgm2. Warum kann ich die ANSI-Zeichen nicht verwenden? `npm` kann sie verwenden, warum kann Baum nicht? Hubro vor 12 Jahren 0
@Codemonkey: Sie müssen dann die Gebietsschemadaten generieren. in Debian `sudo dpkg-reconfigure locales` sollte funktionieren, oder Sie können die Kommentarzeile von` `en_DE.UTF-8 UTF-8` 'in /etc/locale.gen manuell auskommentieren und` sudo locale-gen` ausführen. Und wie ich schon sagte: ** `npm` verwendet * keine * ANSI-Grafik. Sie verwendet ihre Unicode-Entsprechungen (UTF-8) und nur das. ** grawity vor 12 Jahren 0
Beachten Sie, dass PuTTY etwas ungewöhnlich ist, da es die [ANSI / VT100-Grafik im UTF-8-Modus] nicht unterstützt (http://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/utf8-plus-vt100.html) ). Xterm und andere wie Cygwins Mintty unterstützen beide gleichzeitig. ak2 vor 12 Jahren 0
Zusammenfassend ist das Problem mit `tree`, da es keine UTF-8-ANSI-Grafiken wie` npm` darstellen kann. Hubro vor 12 Jahren 0
@Codemonkey: `tree` * kann UTF-8-Grafiken anzeigen, aber Sie sagen es nicht. ** 1) ** Vergewissern Sie sich, dass Ihre Ländereinstellungen korrekt sind. "locale -a" muss in der Liste "en_GB.utf8" enthalten. ** 2) ** Setzen Sie $ LANG auf 'en_GB.UTF-8'. (Ja, $ LANG muss mit "UTF-8" und nicht mit "utf8" enden.) ** 3) ** Führen Sie * nicht * "tree A" aus; Nur "Baum" wird ausreichen. grawity vor 12 Jahren 0
Hier ist meine Arbeitsumgebung: http://sprunge.us/VSSc grawity vor 12 Jahren 0
[Hier funktioniert mein Setup nicht] (http://pastebin.com/g5nb5qWF). Technisch werden alle Ihre Anforderungen erfüllt, aber es treten einige Fehler auf. Beachten Sie, dass `tree` nur ASCII-Symbole verwendet, keine hübschen UTF-8-Grafiken. Kannst du sehen warum? Hubro vor 12 Jahren 0
@Codemonkey: Die Fehler besagen, dass "en_GB.UTF-8" * auf Ihrem System nicht * vorhanden ist. Ich habe Ihnen bereits gesagt, wie Sie es hinzufügen - entweder a) führen Sie sudo dpkg-reconfigure locales aus und aktivieren Sie das Gebietsschema, oder b) bearbeiten Sie `/ etc / locale.gen` manuell, entfernen Sie die Kommentarzeile für die erforderliche Zeile und führen Sie dann sudo locale aus -gen`. grawity vor 12 Jahren 0
Oh Gott, mein Schlechter. Ich dachte, ich hätte das schon getan, aber ich hatte das en_US-Gebietsschema installiert, nicht das en_GB. Es funktioniert jetzt. Vielen dank für Deine Hilfe Hubro vor 12 Jahren 0