ls 无法正确显示西里尔字母

ls 无法正确显示西里尔字母

我对西里尔字母有疑问。我的终端将正常显示西里尔字母以及我的大多数程序,到目前为止我发现的唯一例外是ls。它显示的不是普通的西里尔字母?????? ???

我正在运行 macOS Mojave。

包括屏幕截图。

终端 发现者

答案1

export LC_ALL=ru_RU.UTF-8

说明:首先,确保您安装了正确的区域设置:

locale -a | egrep -i 'ru.*utf'
ru_RU.UTF-8

然后您可以尝试设置正确的区域设置。我的第一次尝试是:

export LC_ALL=ru_RU.UTF-8

你可以做一个简单的测试:

( date; export LC_ALL=ru_RU.UTF-8 ; date +%c)
Fri Mar  8 08:08:50 -03 2019
пятница,  8 марта 2019 г. 08:08:50

然后你可以做一个稍微(?)更复杂的测试:

( date; \
    export LC_ALL=ru_RU.UTF-8 ; \
    d=$(date +%c | sed 's/ /_/g'); \
    mkdir /tmp/test; \
    echo $d > /tmp/test/$d.txt; \
    echo "with right locale:"; \
    ls -ltra /tmp/test ; \
    echo "with 'C' locale:"; \
    LC_ALL=C ls -ltra /tmp/test )
Fri Mar  8 08:14:19 -03 2019
with desired locale:
total 12
-rw-r--r--  1 vfalcao wheel  48 мар  8 08:13 пятница,__8_марта_2019_г._08:13:21.txt
-rw-r--r--  1 vfalcao wheel  48 мар  8 08:13 пятница,__8_марта_2019_г._08:13:38.txt
drwxrwxrwt 19 root    wheel 608 мар  8 08:13 ..
drwxr-xr-x  5 vfalcao wheel 160 мар  8 08:14 .
-rw-r--r--  1 vfalcao wheel  48 мар  8 08:14 пятница,__8_марта_2019_г._08:14:19.txt
with 'C' locale:
total 12
-rw-r--r--  1 vfalcao wheel  48 Mar  8 08:13 ??????????????,__8_??????????_2019_??._08:13:21.txt
-rw-r--r--  1 vfalcao wheel  48 Mar  8 08:13 ??????????????,__8_??????????_2019_??._08:13:38.txt
drwxrwxrwt 19 root    wheel 608 Mar  8 08:13 ..
drwxr-xr-x  5 vfalcao wheel 160 Mar  8 08:14 .
-rw-r--r--  1 vfalcao wheel  48 Mar  8 08:14 ??????????????,__8_??????????_2019_??._08:14:19.txt

答案2

您需要将区域设置设置为可以处理 UTF-8 字符的区域设置。语言C环境不能(不会)这样做。

一种选择是删除LC_*强制区域设置为 的环境变量C,但最好首先解决根本问题并正确设置它们。

unset $(set | sed -n '/^LC_/s/=.*//p')

相关内容