(编辑是为了澄清 Emacs 在显示问题中的作用。)
我当前的gnu-screen
会话不知何故已损坏,并且 Emacs 无法正确显示 UTF-8 字符。
我已经确认,在新启动的gnu-screen
进程中,Emacs 可以正确显示 UTF-8 字符,但目前gnu-screen
用新会话替换损坏的会话会非常具有破坏性,并且
我正在寻找进一步解决此损坏
gnu-screen
会话问题的方法,并希望能够修复它。
FWIW,我在下面提供了更多背景信息,包括迄今为止我为诊断问题所做的工作的描述。
gnu-screen
几天前我在我的办公室开始了这个课程操作系统工作工作站
% screen -U
...(就像我一直做的那样)。从那时起,我从几台机器重新附加了这个会话(可能是在第一次ssh
连接到我工作的工作站之后)使用
% 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
通过on
运行确认了
: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 中放入相同的行,我会收到错误消息,大意是“设置区域设置失败”。我依稀记得为了找到适合达尔文/狮子的区域设置的问题,我花了好几个小时敲脑袋。 “不设置任何内容”可能是该问题的“最不糟糕”的解决方案,毕竟,gnu-screen
即使没有明确的区域设置,至少新的会话确实可以正确显示 UTF-8 字符。但显然我需要弄清楚如何在达尔文/狮子中正确设置区域设置......
更新2: 好的,我想我找到了上面提到的错误的原因:在 Darwin/Lion 中,字符串en_US.utf8
无效;相反,它应该是en_US.UTF-8
。
答案1
我在运行时遇到了同样的问题:
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
shell
setenv LC_ALL en_US.UTF-8
如果你使用的是bash
shell
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
测试,您应该看到漂亮的线条