openSUSE LinuxでUTF-8 /ロケールの問題を解決する方法(ターミナル/ファイル名とプログラムダイアログ)

openSUSE LinuxでUTF-8 /ロケールの問題を解決する方法(ターミナル/ファイル名とプログラムダイアログ)

一部のファイル/フォルダ名は7桁ではなく、OpenSUSEシステムに正しく表示されません。

/music/Gabriel_Fauré フォルダの例:

# ls -1d /music/Gabriel_Faur?
/music/Gabriel_Faur??

ロケールがLC_CTYPE一部のUTF-8値に設定されていない可能性がありますか?

# locale
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_GB.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=en_GB.UTF-8
LC_MESSAGES=en_US.UTF-8
LC_PAPER=a4
LC_NAME=en_US.UTF-8
LC_ADDRESS=en_US.UTF-8
LC_TELEPHONE=en_US.UTF-8
LC_MEASUREMENT=en_US.UTF-8
LC_IDENTIFICATION=en_US.UTF-8
LC_ALL=

LC_CTYPEまあ、私の考えでは、Unicodeにはいいと思います!エラーメッセージは何を言いますか?

LC_ALL興味深いことに、正確な値に設定してもLC_CTYPE問題ありません。

# setenv LC_ALL en_US.UTF-8
# ls -1d /music/Gabriel_Faur?
/music/Gabriel_Fauré

しかし、LC_ALLを設定したくありません。en_US.UTF-8(または実際には他のもの)他の設定を混乱させるからです!これは問題を解決しませんが、私にとっては悪い解決策です。

また、/bin/ls画面に文字を印刷するときにシェルでLC_CTYPEを無視するのはなぜですか?

Arch Linuxではロケールが作成されたことを確認しましたが、openSUSEはこのトピックに関する情報を見つけることができませんでした。しかもロケールが存在するようです。

編集する:

# ls -1d /music/Gabriel_Faur? | hexdump -C
00000000  2f 6d 75 73 69 63 2f 47  61 62 72 69 65 6c 5f 46  |/music/Gabriel_F|
00000010  61 75 72 c3 a9 0a                                 |aur...|
00000016

したがって(私が知っている限り)正しいUTF-8です。

編集2:

# locale -a | grep en_US
en_US
en_US.iso885915
en_US.utf8
# locale -a | wc -l
495

EDIT3(正解後):

# unsetenv LC_PAPER
# unsetenv LC_ALL
# ls -1d /*/Gabriel_Faur?
/music/Gabriel_Fauré

このLC_PAPER=a4変数は、UTF-8でエンコードされたUnicode文字の印刷を防ぎます。画面上

答え1

それは何ですかlocale: Cannot set LC_ALL to default locale: No such file or directory使用したいロケールの1つが存在しないというメッセージが表示されます。環境変数とは何の関係もなく$LC_ALL、環境変数に基づいてローカライズを初期化する呼び出しがNULLを返したときにエラーを報告するだけです。localeこれは、さまざまな変数のいずれかで構成されたロケールが見つからないことを示します。setlocale(LC_ALL, "")LC_*/LANG

ここでは他のすべての項目をオーバーライドするので。このシステムの有効なロケール名ではないため、エラーが発生することLC_ALL=en_US.UTF-8が問題ですLC_PAPER=a4a4setlocal(LC_ALL, "")

失敗時のsetlocale()動作はデフォルトでCロケールに設定されます。ここで、文字エンコーディングはASCIIです。 Cロケールでは、各バイトは文字ですが、0xc3と0xa9はASCII形式ではないため、不明な文字なので、出力が端末に到達するとアクティブにls -qなります。-q?

次のコマンドを使用して、システムで使用可能なロケールのリストを表示できます。

locale -a

a4そこでは見つからないかもしれません。用紙サイズをA4にするには、次のようにlocale -k LC_PAPER出力します。

height=297
width=210
paper-codeset="UTF-8"

ヨーロッパのロケールを使用することもできます$LC_PAPERen_GB.UTF-8

答え2

localeOpenSuseでは、以下を使用して削除の問題を解決できます。

zypper in glibc-locale

en_GBMicroOsイメージを作成するときにロケールを使用するために必要です。kiwi

関連情報