Macにログインし、ターミナルを実行し、LinuxシステムにSSHで接続し、emacsウィンドウでmake
を実行しています。私のエラーログは次のようになります:
_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をターミナルに渡す必要があることだと思います。それを実現する方法はありますか?
リモートホストは、端末が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
環境変数をリモートホストに通信しません。これを調整することはできますが、MacのsshクライアントがLANG
変数を送信するように構成し、リモートホストのsshdデーモンがそれを読み取るように構成する必要があります。
詳細については、Macおよびリモートホストのssh_configおよびsshd_configのマニュアルページを参照してください。 MacのSendEnv LANG LC_*
ファイルに/etc/ssh/ssh_config
のような行を追加し、リモートホストのAcceptEnv LANG LC_*
に/etc/ssh/sshd_config
を追加します(詳細はリモートホストによって異なる場合があります)。
または、リモートシェルにログインしたら、単にexport LANG="en_US.UTF-8"
することもできます(正確な構文は、使用しているリモートシェルによって異なります)。米国英語(「en_US」)でない場合は、必ず正しい言語を使用してください。リモートホストの~/.bash_profile
のようなシェル起動スクリプト内からLANG
を設定することにより、これを自動化することもできます。