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')

관련 정보