私の問題の簡単な説明:
最近、bash/nano/irssi/etcにドイツ語のウムラウト(äüö)、ユーロ記号(€)、その他のUTFなどの「特殊な」UTF-8文字を表示できない問題が発生しましたß、§などの-8文字.
私がすでに試したこと:
dpkg-reconfigure locales
および生成されたen_US.UTF-8のみLC_ALL
、LANG
およびLANGUAGE
からen_US.UTF-8
以内 .bashrc
ユーザーとルートの両方もちろん、これらすべての変更の後にsshを介して再ログインし、サーバーの再起動を試みましたが、すべてのケースで99,9875%でLinuxの問題が解決されないことがわかっています。
私のシステムに関する情報:
OS:Debianストレッチ-> 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
。
正直なところ、私はアイデアがありません。これを手伝ってくれる人はいますか?
端末がUTF-8エンコーディングを使用することをbashやその他のアプリケーションに伝えました。これは、端末が実際にUTF-8を使用している場合にのみ有効です。 Bashは端末のエンコーディングがそうであると決定することはできません、端末が決定することになります。
UTF-8を使用する場合は、UTF-8を使用するように端末を構成します。 SSHを使用しているので、SSHクライアントを実行している端末をUTF-8を使用するように構成する必要があります。最新のほとんどのシステムではこれがデフォルトですが、どうやらこの方法ではセットアップされていません。
ターミナルでLC_CTYPE
を明示的に設定することは避けてください。理想的には、ターミナルがこれを設定します。ただし、これは常に機能するとは限りません(特にSSHを介して)(多くのシステムでは、SSHサーバーはクライアントがLC_CTYPE
を設定することを禁止しています)。
環境変数を設定する必要がある場合、適切な場所は .profile
ではなく.bashrc
になります。
(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エンコーディングでlocaleを使用する端末で):
$ ./foo2
�
�
./foo2: line 5: $'\344': command not found
重要なのは、bash
がエラーメッセージをロケールに対応するように調整し、UTF-8ロケールでISO-8859-1文字を表示できないことがわかり、8進数として表示されることです。