emacs中的Shell通过在它们之前\ 200\230显示变量的名称

anu*_*nde 1 emacs shell

当我从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表示变量或函数名称的开头和结尾.任何想法发生了什么或如何摆脱它?

cjm*_*cjm 5

\200是一个八进制转义序列.在十六进制中,â\200\230E2 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.