损坏的 gnu-screen 会话无法正确显示 UTF-8

损坏的 gnu-screen 会话无法正确显示 UTF-8

(编辑是为了澄清 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_ALLen_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

如果你使用的是cshshell

setenv LC_ALL en_US.UTF-8

如果你使用的是bashshell

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测试,您应该看到漂亮的线条

相关内容