Поврежденный сеанс gnu-screen не отображает UTF-8 правильно
(Отредактировано, чтобы прояснить роль Emacs в проблеме с дисплеем.)
Мой текущий сеанс gnu-screen
каким-то образом испорчен, и Emacs не отображает символы UTF-8 должным образом.
- Экранная сессия работает от имени root? (это не должно быть) node.js
- Команда gnu screen для X
- Как я могу отменить запущенный процесс и связать его с новой оболочкой экрана?
- Сохранять сеансы SSH после отключения
- Переполнение буфера на Fedora 16 serial
Я подтвердил, что в недавно запущенных процессах gnu-screen
Emacs правильно отображает символы UTF-8, но на данный момент было бы очень разрушительно заменить поврежденный сеанс gnu-screen
на новый, а вместо этого
Я ищу способы дальнейшего устранения проблемы с этой поврежденной сессией
gnu-screen
и, надеюсь, исправить ее.
FWIW, я даю больше информации ниже, включая описание того, что я сделал до сих пор, чтобы диагностировать проблему.
Я начал этот сеанс gnu-screen
несколько дней назад на моей рабочей станции OS X при работе с
% screen -U
… (как я всегда это делаю). С тех пор я повторно подключил этот сеанс с нескольких компьютеров (возможно, после первого ssh
-ing на мою рабочую станцию на работе), используя
% screen -U -dR
(опять же, это то, что я всегда делаю). Я сделал это сегодня утром на своей рабочей станции на работе (машина, на которой фактически работает gnu-screen
).
Сегодня, впервые с тех пор, как я создал этот сеанс gnu-screen
, мне нужно было работать с файлами, которые содержат много символов не-ascii UTF-8. Именно тогда я обнаружил, что этот сеанс gnu-screen
должен каким-то образом испорчен, потому что он отображает все эти символы как ?
, что приводит к непригодному отображению.
(Как я уже упоминал, эти UTF-8-богатые файлы отображаются корректно с помощью недавно запущенных сеансов gnu-screen
, поэтому я уверен, что проблема отображения связана с конкретным сеансом gnu-screen
который я здесь вызываю «поврежден». Кроме того, я подтвердил, что «отображение» отображается в каждом терминале, к которому я подключил сеанс gnu-screen
, поэтому проблема заключается не в терминальной программе, в которой размещается сеанс gnu-screen
. Наконец, Я также подтвердил, что проблема заключается не в одном конкретном сеансе Emacs: в поврежденном сеансе gnu-screen
каждый новый сеанс Emacs отображает символы UTF-8 как ?
Который утверждает, что проблема связана с конкретным сеансом Emacs.)
Я подтвердил, что utf8
,
:utf8 on on
Вывод :info
(1,5)/(210,52)+10000 +(-)flow app log UTF-8 0(zsh)
И, FWIW:
% /usr/local/bin/screen --version Screen version 4.00.03 (FAU) 23-Oct-06
Кроме того, я должен отметить, что новые
Что еще можно сделать для устранения этой проблемы?
ОБНОВЛЕНИЕ: Drav Sloan и Stephane Chazelas спросили о моих настройках локали:
% locale LANG= LC_COLLATE="C" LC_CTYPE="C" LC_MESSAGES="C" LC_MONETARY="C" LC_NUMERIC="C" LC_TIME="C" LC_ALL=
В настоящее время для OS XI не задаются никакие языковые переменные.
В системах Linux мой .zshenv
действительно устанавливает
export LANG=en_US.utf8 export LC_ALL=en_US.utf8
… но если я помещу те же строки в моем .zshenv на Darwin, я получаю сообщения об ошибках, что «установка локали не удалась». Я смутно помню, как я несколько раз бил свой череп над проблемой поиска правильных настроек языка для Дарвина / Льва. Возможно, что «установление ничего» появилось как «наименее ужасное» решение проблемы, и в конце концов, по крайней мере, свежие сеансы gnu-screen
действительно отображают символы UTF-8 правильно, даже при отсутствии явной настройки локали. Но, очевидно, мне нужно выяснить, как правильно установить языковой стандарт в Darwin / Lion …
UPDATE2: Хорошо, я думаю, что я выяснил причину ошибок, о которых я упоминал выше: в Darwin / Lion строка en_US.utf8
недействительна; вместо этого он должен быть en_US.UTF-8
.
One Solution collect form web for “Поврежденный сеанс gnu-screen не отображает UTF-8 правильно”
У меня была такая же проблема при запуске:
git clone https://github.com/jwiegley/git-scripts.git cd git-scripts perl git-forest
Я использовал это как свой тест. В принципе, вы должны получить хорошие строки, если вы правильно установили utf8. Если нет, вы получите уродливые коробки или символы.
Решение состоит в том, что вам нужно установить LC_ALL
в en_US.UTF-8
ПЕРЕД началом нового сеанса экрана. Я устал делать это после создания сеанса экрана и не повезло.
Вот шаг, который я последовал, чтобы добиться этого:
1) Запустите locale
чтобы просмотреть текущую настройку. Я получил это (это объясняет, почему у меня возникли проблемы:
LANG=en_US.UTF-8 LC_CTYPE="C" LC_NUMERIC="C" LC_TIME="C" LC_COLLATE="C" LC_MONETARY="C" LC_MESSAGES="C" LC_PAPER="C" LC_NAME="C" LC_ADDRESS="C" LC_TELEPHONE="C" LC_MEASUREMENT="C" LC_IDENTIFICATION="C" LC_ALL=C
2) Перед созданием нового сеанса экрана вам необходимо переопределить LC_ALL
в en_US.UTF-8
если вы используете оболочку csh
setenv LC_ALL en_US.UTF-8
если вы используете оболочку bash
export LC_ALL="en_US.UTF-8"
3) Проверьте, что LC_ALL
был установлен правильно, снова запустив locale
:
LANG=en_US.UTF-8 LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UTF-8" LC_MESSAGES="en_US.UTF-8" LC_PAPER="en_US.UTF-8" LC_NAME="en_US.UTF-8" LC_ADDRESS="en_US.UTF-8" LC_TELEPHONE="en_US.UTF-8" LC_MEASUREMENT="en_US.UTF-8" LC_IDENTIFICATION="en_US.UTF-8" LC_ALL=en_US.UTF-8
4) Теперь запустите новый сеанс экрана и запустите тест git-forest
и вы увидите красивые строки