答え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_*
1つのオプションは、ロケールをに強制する環境変数を削除することですがC
、まず基本的な問題を修正して正しく設定することをお勧めします。
unset $(set | sed -n '/^LC_/s/=.*//p')