为什么我的终端不能正确输出unicode字符?

问题描述 投票:0回答:5

例如,我的终端是这样做的:

$ echo -e "\xE2\x98\xA0"
���

我希望它能做到这一点:

$ echo -e "\xE2\x98\xA0"
☠

为什么?如何让我的终端输出正确的 unicode 符号?

我在 Arch Linux 上使用 Gnome 3 的终端。

locale
的输出显示:

LANG=C
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=
bash shell command-line console terminal
5个回答
17
投票

我想通了。我必须确保在

LANGUAGE="en_US.UTF-8"
中设置
/etc/rc.conf
,在
LANG="en_US.UTF-8"
中设置
/etc/locale.conf
,然后注销并重新登录,然后就可以了。我的终端现在可以正确显示 unicode。


14
投票

我使用以下命令更新了我的区域设置:

sudo update-locale LANG=en_US.UTF-8 LANGUAGE=en.UTF-8

然后重新启动:

sudo reboot

11
投票

如果您无法更改

/etc/*
文件,您可以手动将
gnome-terminal
菜单
Terminal
|
Set Character Encoding
设置为
Unicode(Utf-8)


1
投票

我在切换到新电脑后试图解决这个问题。我正在使用

Windows Terminal
,并将
Ubuntu
滴入
WSL2
上的
Win 10

我尝试了此处提供的建议并重新启动;没有变化。

解决方案

对我来说,修复方法是安装修补的书呆子字体,并将该字体设置为 Windows 终端设置中每个配置文件的默认字体。


0
投票

localectl

可能是通过我的

.bash_profile
中的错误行,唯一有帮助的是:

localectl set-locale en_US.UTF-8

.bash_profile
中可能有问题的一行是:

# ⚠️ Better not do this
export LANG="en_US.utf8"

注意“.utf8”和“.UTF-8”之间的区别。

在运行

localectl set-locale en_US.UTF-8
之前,
localectl status
的输出是:

System Locale: LANG=C
    VC Keymap: (unset)
   X11 Layout: (unset)

运行后:

System Locale: LANG=en_US.UTF-8
    VC Keymap: (unset)
   X11 Layout: (unset)

这解决了在 Linux 虚拟控制台中运行 fzf 的问题,我现在可以在 Arch Linux 上的虚拟控制台中显示变音符号和其他非 ASCII 字符。

相关问题:

© www.soinside.com 2019 - 2024. All rights reserved.