Почему символы ANSI не работают в PuTTY / Debian?

6648
Hubro

Потрясающее приложение tree, которое я установил в Debian apt-get install tree, имеет возможность рисовать вывод с использованием графики ANSI. Его вывод теперь выглядит так:

, tqq node_modules x tqq coffee-script х ткк эко х ткк экспресс х ткв навсегда х стилус mqq tqq package.json MQQ SRC mqq daemontest.coffee 

Это явно неправильно. Это переменные my LANG=en_GB.UTF-8 UTF-8и LC_ALL=Cenv. PuTTY также ожидает UTF-8. Если я изменю PuTTY на «Использовать кодировку шрифта», то все будет tree -Aвыглядеть правильно, но npm listпотом сломается и будет выглядеть так:

â € œâ € € coffee-script@1.2.0 â ”œâ € € ¬ 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 â ”‚ â ”œâ € € mkdirp@0.0.7 â ”‚ â ”” â ”€ â € € qs@0.4.0 ... 

Все эти вещи должны работать правильно, поэтому я предполагаю, что мои настройки где-то не так. Может ли кто-нибудь помочь мне настроиться именно там, где?


РЕДАКТИРОВАТЬ: мой envтеперь выглядит так. Проблема все еще там

root @ chu: ~ # env TERM = шпатлевка SHELL = / bin / Баш SSH_CLIENT = ** Цензура ** SSH_TTY = / DEV / очки / 1 USER = корень LS_COLORS = rs = ** Удалено, потому что стена текста ** PYTHONBREW_ROOT = / USR / местные / pythonbrew MAIL = / вар / почта / корень PATH = / USR / местные / pythonbrew / бен: / USR / местные / SBIN: / USR / местные / бен: / USR / SBIN: / USR / бен: / SBIN: / бен PWD = / корень ЛАНГ = en_GB.UTF-8 SHLVL = 1 НАЧАЛО = / корень ЯЗЫК = en_US: ан LS_OPTIONS = - цвет = автоматический PYTHONPATH =: / Root / pymodules LOGNAME = корень SSH_CONNECTION = ** Цензура ** _ = / USR / бен / окр 
6

1 ответ на вопрос

9
grawity

Первая проблема заключается в том, что у вас установлено значение $ LC_ALLC . Если вы установите $ LC_ALL, он переопределит все остальные настройки локали, включая $ LANG. Поскольку языковой стандарт «C» использует ISO-8859-1, treeон не будет знать о доступности Unicode и попытается переключиться на графическую кодовую страницу VT100 (имеется четыре переключаемых кодовых страницы), что PuTTY отказывается делать, ожидая UTF-8. Чтобы это исправить, прекратите установку LC_ALL в вашей среде и treeбудете использовать графику Unicode.

Вторая проблема в том, что ваша переменная $ LANG неверна - вам не нужно указывать кодировку дважды. Установите, LANG=en_GB.UTF-8чтобы исправить это.

Третья проблема заключается в том, что вы вынуждены tree использовать графику VT100. Не используйте -Aопцию.

Держите PuTTY настроенным для UTF-8.

(на npmэто не влияет, потому что он жестко задан для использования графики Unicode независимо от локали.)

Эй, спасибо за блестящий ответ, но у меня есть несколько проблем с этим. Прежде всего, я никогда не касался переменных LC_ALL или LANG. Я не знаю, где они установлены, и я не знаю, как их сбросить или изменить. Не могли бы вы немного рассказать об этом? Спасибо! Hubro 12 лет назад 0
@Codemonkey: сначала проверьте ваши скрипты запуска оболочки. Если вы используете * bash *, то `grep LC_ALL ~ / .profile ~ / .bash_profile ~ / .bash_login ~ / .bashrc / etc / profile /etc/profile.d/* / etc / * bashrc / etc / environment * / etc / default / locale` - скопировать / вставить это :) grawity 12 лет назад 0
Да, я нашел объявление LC_ALL и на LANG. Я удалил LC_ALL и отредактировал LANG. Вывод env отредактирован в мой вопрос, потому что дерево все еще просто пишет "tqq" и "mqq" вместо графики ANSI Hubro 12 лет назад 0
@Codemonkey: 1) Вы используете `tree` или` tree -A`? * Не * используйте режим ANSI; просто запустите `tree` и позвольте ему использовать вместо этого Unicode. 2) Показывает ли `locale -a`` en_GB.UTF-8` в списке? grawity 12 лет назад 0
`locale -a`: http://pastebin.com/Kzttvgm2. Но почему я не могу использовать символы ANSI? `npm` может использовать их, почему не может дерево? Hubro 12 лет назад 0
@Codemonkey: Вам нужно сгенерировать данные локали, тогда; в Debian `sudo dpkg -configure locales` должен работать, или вы можете вручную раскомментировать строку` `en_GB.UTF-8 UTF-8` 'в /etc/locale.gen, а затем запустить` sudo locale-gen`. И, как я уже сказал: ** `npm` * не * использует графику ANSI. Он использует их Unicode (UTF-8) эквиваленты, и только это. ** grawity 12 лет назад 0
Обратите внимание, что PuTTY несколько необычна, поскольку не поддерживает [графику ANSI / VT100 в режиме UTF-8] (http://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/utf8-plus-vt100.html. ). Xterm и другие, такие как мятный Cygwin, поддерживают оба одновременно. ak2 12 лет назад 0
Итак, подведем итог: проблема в `tree`, потому что он не может отображать UTF-8 ANSI-выглядящую графику, например,` npm`? Hubro 12 лет назад 0
@Codemonkey: `tree` * может * отображать графику UTF-8, но вы говорите, что нет. ** 1) ** Убедитесь, что у вас правильные настройки локали; "locale -a`" должен иметь в списке `en_GB.utf8`. ** 2) ** Установите для $ LANG значение `en_GB.UTF-8`. (Да, $ LANG должен заканчиваться на `UTF-8`, а не на` utf8`.) ** 3) ** Не * не * запускать "` tree -A` "; просто "дерево" будет достаточно. grawity 12 лет назад 0
Вот моя рабочая установка: http://sprunge.us/VSSc grawity 12 лет назад 0
[Вот моя не работающая настройка] (http://pastebin.com/g5nb5qWF). Технически все ваши требования выполняются, но у меня появляются некоторые ошибки. Обратите внимание, что `tree` использует только символы ASCII, а не симпатичную графику UTF-8. Вы понимаете почему? Hubro 12 лет назад 0
@Codemonkey: ошибки говорят о том, что `en_GB.UTF-8` * не существует * в вашей системе. Я уже говорил вам, как его добавить - либо а) запустите `sudo dpkg-переконфигурировать локали` и включите локаль, либо б) вручную отредактируйте` / etc / locale.gen`, раскомментируйте нужную строку, затем запустите `локаль sudo -gen`. grawity 12 лет назад 0
Боже мой, плохо. Я думал, что уже сделал это, но у меня была установлена ​​локаль en_US, а не en_GB. Это работает сейчас. Большое спасибо за вашу помощь Hubro 12 лет назад 0