当我从emacs中的shell/eshell/term运行编译指令时,变量的名称在shell中显得很奇怪.
下面是一个示例代码(带有一些随机错误)和编译时的输出:
#include iostream
#include cstdlib
int main (void)
{
cscdsd ;//some random error
return ;
}
//shell o/p:
g++ new.cc
new.cc: In function â\200\230int main()â\200\231:
new.cc:7: error: â\200\230cscdsdâ\200\231 was not declared in this scope
new.cc:8: error: return-statement with no value, in function returning â\200\230intâ\200\231
~/codes $
Run Code Online (Sandbox Code Playgroud)
我想通过的是\ 200\230和\ 200\231表示变量或函数名称的开头和结尾.任何想法发生了什么或如何摆脱它?
\200
是一个八进制转义序列.在十六进制中,â\200\230
是E2 80 98
,这是U + 2018(左单引号)以UTF-8编码的方式.同样,â\200\231
是U + 2019(右单引号).当g++
发出UTF-8并且Emacs将其解释为ISO-8859-1 时会发生这种情况.
您可能需要设置default-process-coding-system
不同的值.试试(在〜/ .emacs中):
(setq default-process-coding-system '(utf-8-unix . utf-8-unix))
Run Code Online (Sandbox Code Playgroud)
还有其他方法可以告诉Emacs期望的编码系统.阅读变量default-process-coding-system
&process-coding-system-alist
和函数universal-coding-system-argument
&的文档set-buffer-process-coding-system
.