UTF-8 文字が Debian で正しく表示されません。

UTF-8 文字が Debian で正しく表示されません。

私の問題の簡単な説明:
最近bash / nano / irssi / etcでドイツ語のウムラウト(äüö)、ユーロ記号(€)などの「特殊」UTF-8文字を表示できない問題が発生しました。 )およびその他のいくつかの文字UTF-8文字(例:ß、§など)

私が試したこと:

  • dpkg-reconfigure localesen_US.UTF-8のみを生成します。
  • 設定LC_ALLとマイユーザーとLANGルートスコープLANGUAGEen_US.UTF-8.bashrc
  • ロケールとlibx11-dataの再インストール(すべての言語データが含まれているように見える)

もちろん、これらすべての変更を行った後、SSHを介して再度ログインしてサーバーを再起動しようとしました。 99,9875%の場合、Linuxでは問題が解決しないことがわかったにもかかわらず。

私のシステム情報:
OS:Debianstretch - > Linux 3.2.0-4-amd64#1 SMP Debian 3.2.63-2 x86_64 GNU / Linux
ロケール:v.2.22-7

出力locale

LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
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=en_US.UTF-8

たとえば、入力したときコンソールに入り、Enterキーを押します-bash: $'\344': command not found
正直、よくわかりません。誰でもこの問題を解決するのに役立ちますか?

答え1

端末がUTF-8エンコーディングを使用することをbashや他のアプリケーションに指示しました。これは、端末が実際にUTF-8を使用している場合にのみ機能します。 Bashは端末エンコーディングを決定できませんが、端末は実行します。

UTF-8を使用するには、UTF-8を使用するように端末を設定します。 SSHを使用しているため、SSHクライアントを実行しているすべての端末がUTF-8を使用するように構成する必要があります。これはほとんどの最新システムのデフォルト設定ですが、あなたのシステムはそのように設定されていないようです。

LC_CTYPE端末で明示的に設定することは避けてください。理想的には端末で設定されます。ただし、これは特にSSHを介して常に機能するわけではありません(多くのシステムでは、SSHサーバーはクライアント設定を無効にしますLC_CTYPE)。

環境変数を設定する必要がある場合、正しい場所は次のとおりです。.profile、いいえ.bashrc

答え2

Xベースの端末エミュレータの1つではなく、Linuxコンソールを使用しており、UTF-8モードで実行されていないようです。このスクリプトを使用して機能をオンにし、なぜオフになったのかを調べます。

#!/bin/sh
# send character-string to enable UTF-8 mode
if test ".$1" = ".off" ; then
        printf '\033%%@'
else
        printf '\033%%G'
fi

つまり、スクリプトを呼び出して次のようにutf8入力します。

utf8 on

エラーメッセージを調べるために、2つの形式(1つはUTF-8、もう1つはISO-8859-1)で次のスクリプトを作成しました。

#!/bin/bash
printf "ä\n"
echo "ä"
ä

UTF-8スクリプトは次のように言います。

$ ./foo
ä
ä
./foo: line 4: ä: command not found

ISO-8859-1スクリプト表現(使用時ロケールUTF-8エンコーディングを使用):

$ ./foo2
./foo2: line 5: $'\344': command not found

要点は、bashロケールに合わせてエラーメッセージを調整し、UTF-8ロケールではISO-8859-1文字を表示できないため、これを8進数で表示することです。

関連情報