LinuxにsshしてEmacsを実行すると、MacターミナルがUnicode UTF-8を正しく表示しない


1

私はMacにログインして、ターミナルを実行し、Linuxシステムにsshしてmake、emacsウィンドウで実行しています。エラーログは次のようになります。

_raw.cpp:139: error: invalid conversion from âconst char*â to âsize_tâ
_raw.cpp:139: error:   initializing argument 2 of âint snprintf(char*, size_t, const char*, ...)â
_raw.cpp:139: error: invalid conversion from âintâ to âconst char*â
_raw.cpp:139: error:   initializing argument 3 of âint snprintf(char*, size_t, const char*, ...)â

どうやらGCCはユニコードのスマートクォート文字を使用しようとしているようですが、それらはUTF-8として送信されており、Emacsはそれらをインターセプトしています。ここでの問題は、EMACSがサブプロセスによって生成されたUTF-8をターミナルに渡す必要があることだと思います。それを実現する方法はありますか?

回答:


5

リモートホストは、端末がUTF-8を使用していることを知りません。

デフォルトでは、ターミナルはテキストをUTF-8としてエンコードし、デフォルトではターミナルはLANG環境変数を介してターミナルシェルと通信します(これらの設定を変更していない限り)。

コマンドで使用されているエンコーディング(および言語)を確認できますlocale。たとえば、これは私のMacでは次のように表示されます。

$ locale
LANG="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_CTYPE="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_ALL=

ローカルおよびリモートホストで実行すると、リモートホストのロケール値に「utf-8」が含まれていないことがわかります。

ただし、Mac OS X Lion 10.7より前のバージョンでは、sshはデフォルトでLANG環境変数をリモートホストに通知しません。これを調整することはできますが、LANG変数を送信するようにMacのsshクライアントと、それを読み取るためにリモートホストのsshdデーモンの両方を構成する必要があります。

詳細については、Macおよびリモートホストのssh_configおよびsshd_configのマニュアルページを参照してください。あなたは、おそらくのような行を追加しますSendEnv LANG LC_*/etc/ssh/ssh_configお使いのMac上のファイルやAcceptEnv LANG LC_*/etc/ssh/sshd_config(詳細は、リモート・ホスト上で変更される場合があります)、リモートホスト上で。

または、export LANG="en_US.UTF-8"リモートシェルにログインすると、簡単に実行できます(正確な構文は、使用しているリモートシェルによって異なります)。米国英語(「en_US」)でない場合は、正しい言語を使用してください。リモートホストLANGなどのシェルスタートアップスクリプト内から設定することにより、これを自動化することも~/.bash_profileできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.