vy3*_*y32 1 mac ssh terminal emacs utf-8
我登录到 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*, ...)â
Run Code Online (Sandbox Code Playgroud)
请注意,显然 GCC 正在尝试使用 unicode smartquote 字符,但它们以 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=
Run Code Online (Sandbox Code Playgroud)
如果您在本地和远程主机上运行它,您应该看到远程主机的区域设置值中不包含“utf-8”。
但是,在 Mac OS X Lion 10.7 之前,默认情况下 ssh 不会将LANG环境变量传送到远程主机。您可以对此进行安排,但它需要在 Mac 上配置 ssh 客户端以发送LANG变量,并在远程主机上配置 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"登录到远程 shell 即可(确切的语法取决于您使用的远程 shell)。如果不是美国英语(“en_US”),请务必使用正确的语言。您还可以通过在远程主机上的LANGshell 启动脚本中进行设置来自动执行此操作~/.bash_profile。