Поврежденный сеанс gnu-screen не отображает UTF-8 правильно

(Отредактировано, чтобы прояснить роль Emacs в проблеме с дисплеем.)

Мой текущий сеанс gnu-screen каким-то образом испорчен, и Emacs не отображает символы UTF-8 должным образом.

Я подтвердил, что в недавно запущенных процессах 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 .

  • Как узнать каталог по умолчанию для окна GNU?
  • Ноутбук Dell с двумя внешними экранами
  • как сфокусировать различные «регионы» (Ctrl-a S) с помощью мыши в `screen`?
  • Передача данных на последовательный порт через экран
  • Как перейти к началу командной строки, когда я нахожусь внутри экрана?
  • Экран экрана GNU переименовывается всякий раз, когда я набираю команду
  • Запуск `screen` через задание @reboot cron
  • Как запустить скрипт на удаленной машине с помощью команды экрана и ssh?
  • 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 и вы увидите красивые строки

    Linux и Unix - лучшая ОС в мире.