我登录了 Mac,运行终端,通过 ssh 连接到 Linux 系统并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 显然正在尝试使用 unicode 智能引号字符,但它们以 UTF-8 发送,而 Emacs 正在拦截它们。我认为这里的问题是 EMACS 需要将子进程生成的 UTF-8 传递到终端。有什么想法可以实现吗?
答案1
远程主机不知道您的终端正在使用 UTF-8。
默认情况下,终端将文本编码为 UTF-8,并且默认情况下终端通过环境变量将其传达给终端 shell 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"
或者,您只需登录远程 shell 即可(具体语法取决于您使用的远程 shell)。如果不是美国英语(“en_US”),请务必使用正确的语言。您也可以通过在shell启动脚本(如在远程主机上)LANG
内进行设置来自动执行此操作。~/.bash_profile