私の問題の簡単な説明:
最近bash / nano / irssi / etcでドイツ語のウムラウト(äüö)、ユーロ記号(€)などの「特殊」UTF-8文字を表示できない問題が発生しました。 )およびその他のいくつかの文字UTF-8文字(例:ß、§など)
私が試したこと:
dpkg-reconfigure locales
en_US.UTF-8のみを生成します。- 設定
LC_ALL
とマイユーザーとLANG
ルートスコープLANGUAGE
en_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進数で表示することです。