在tmux中,UTF-8字符无法正确显示。

我在我的zsh主题中使用了`♪`字符作为提示符。但在tmux中,我的提示符表现得很奇怪,显示出额外的空格,就像这样:
♪ ~   I can type from here
♪ ~ Instead of here like in zsh, and sometimes when I do stuff like cd
♪ ~   cd ~
♪ ~ cdcd /
♪ ~ ^^These 2 chars just show up but are not actually part of command and not delete-able

我最近发现,我可以通过set-window-option -g utf8 on将tmux编码设置为utf8。这样做后,空格问题消失了,但是字符变成了_。我该如何在tmux中恢复我的
我的zsh主题:
PROMPT='%{$fg_bold[cyan]%} ♪ %{$fg[blue]%}%c%{$fg_bold[blue]%}$(git_prompt_info)$(git_remote_status)%{$fg_bold[blue]%} % %{$reset_color%}'

我无法让set-window-option命令正常工作,出现了“not found cmd”的错误。请您提供详细的复现步骤。 - user.dz
我使用了这里的tmux配置(链接:https://gist.github.com/snuggs/800936)(也在这里使用:https://github.com/hoelzro/dotfiles/blob/master/tmux.conf)。当我设置该选项时,似乎tmux将所有非ASCII字符转换为“_”。 - Sourabh
3个回答

使用u标志启动tmux可以解决这个问题。
tmux -u

我在我的zshrc中创建了一个tmux的别名。
alias tmux='tmux -u'

2谢谢旗帜!使用 tmux 和 nvim 时,一切变得混乱无序真是令人沮丧!这解决了问题!再次感谢。 - Dave Amit
想了解为什么的人,请点击这里-u标志明确告知tmux支持UTF-8编码。 - shellbye
2有趣。我以为在~/.tmux.conf中设置set -g utf8 on会解决这个问题,但显然并没有。不过,在调用tmux时明确使用标志确实有效。非常感谢,你帮我省了很多麻烦! - Tim Visee
1就我所知,最近对我来说出了问题,结果发现是因为我在配置文件中添加了LC_ALL=C,这强制使用ASCII编码。 - Ehsan Kia
2只是一点小提示。设置似乎没有在会话中保存。在分离之后,可以使用 tmux -u attach 将会话设置为 UTF-8。 - cojocar

感谢提供标志部分,但我们也可以将以下内容设置到个人配置文件(例如.zshrcbashrc文件)中。
export LC_ALL=en_IN.UTF-8
export LANG=en_IN.UTF-8

使用此选项设置后,无需使用-u标志。

1只有在上面粘贴source $ZSH/oh-my-zsh.sh之前才有效。 - Yesh

如果你使用不同的shell,比如"fish"或者sh,你可以改变tmux的环境变量。

$ tmux setenv 'LC_ALL' 'en_IN.UTF-8'

$ tmux setenv 'LANG' 'en_IN.UTF-8'

$ tmux show-environment

DISPLAY=:0.0
-KRB5CCNAME
LANG=en_IN.UTF-8                          <-enviroment variable
LC_ALL=en_IN.UTF-8
SSH_AGENT_PID=1269
-SSH_ASKPASS
SSH_AUTH_SOCK=/tmp/ssh-tGUWJ874wmOG/agent.1193
-SSH_CONNECTION
VIRTUAL_ENV=/home/Jai_BholeNath/.tmux.conf
-WINDOWID
XAUTHORITY=/home/Jai_BholeNath/.Xauthority