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