结论

先说结论,乱码问题要么是你的终端编码格式有问题,要么终端本身就是有问题的。

配置成终端运行

先说怎么配置成终端运行

  • 文件 -> 首选项 -> 设置

  • 搜索 “Run Code Configuration”

  • 往下划找到Code-runner:Run In Terminal,勾选就可以了

中文乱码

再来说说中文乱码问题。如下图,因为窗口运行不能输入,所以我只是单纯输出。这时候输出是正常的,我这是默认配置。

看看终端运行。如下图出现乱码了,我配置的终端是cmd.exe,用哪个终端可以改。后面我说说怎么改终端。

所以中文乱码是什么原因呢?

没错,就是cmd.exe编码格式出了问题。把cmd.exe改成UTF-8格式就好了。

这里先叠个甲,我再说一遍我用的终端是cmd.exe,可能大家用的终端跟我不一样,这个要去配置的。不要不看自己终端就去改cmd.exe,万一你配置的是Powershell呢?

修改编码格式(永久性)

那么接下来修改cmd.exe。

win+r,输入 “regedit” 进入注册表


在路径下 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor 中的 autorun 文件数值数据中输入 "chcp 65001"

注:有的小伙伴如果注册表中没有autorun,可以在当前目录中新建字符串,填写参数仍然有效。

运行代码,如下图,乱码问题解决。

修改编码格式(暂时性)

每次运行代码之前在终端执行

chcp 65001

修改终端

再来说说怎么改终端

然后出现以下界面,如下图。用哪个终端自己选,这里我用的是Command Prompt,也就是cmd.exe。

VScode使用别的终端出现的问题

两个问题:

1.用别的终端不管怎么配置都会有乱码

2.终端还会提示shell集成无法激活

这两个问题我猜测都是终端本身的问题。

PowerShell

直接在终端运行然后出现乱码那就是终端本身的问题,要是你在VScode里使用的是这个终端(PowerShell),那不管你怎么配置都没用,因为这是终端本身的问题。

如下图,我改成了UTF-8格式还是乱码。(这里我用的是PowerShell终端)

我看了下版本,感觉是版本的问题?反正就是我的PowerShell有问题,具体问题在哪暂时还不清楚。(后续会更新?)

如下图,默认终端我改成PowerShell出现乱码(不是编码格式问题),同时提示shell集成无法激活

解决乱码问题

先说说用PowerShell怎么解决乱码问题——修改settings.json文件,修改code-runner相关配置。

然后出现以下界面,如下图。

然后在下图箭头所指位置插入“-finput-charset=UTF-8 -fexec-charset=GBK ”。如下两图,自己可以看看区别。

这段代码的意思就是把GBK格式的文件改成UTF-8格式的文件。

你看,乱码问题解决了。如下图。

shell集成无法激活

最后再说说shell集成无法激活是什么原因吧?应该是PowerShell版本太低,与VScode不太兼容的原因?后续我会更新到高版本,再来看看是否还会“shell集成无法激活”。

所以我这里的解决方案是去下载一个高版本的PowerShell。

———————————————————分割线—————————————————————

兄弟们我解决这个问题了,看看这篇文章

解决Shell集成无法激活(PowerShell)-CSDN博客

总结

看到这里我说说为什么我觉得是PowerShell的问题。

(不知道你们发现没有,编码格式为GBK的cmd.exe和编码格式为UTF-8(chcp 65001)的PowerShell对编码格式为GBK的二进制文件执行输出的乱码是一样的)

 

你们觉得是翻译过来是什么意思?我觉得Code-Runner在终端运行就是直接调用你配置的终端然后执行编译后生成的代码。

注意:我说的是在VScode用Code-Runner调用终端,而且是编译后生成的代码。

我们知道编译器仅仅只是将源码翻译成机器代码(也就是二进制文件)。

一个可执行程序仅仅编译可不够,还要链接、生成文件等等步骤对吧?

那么这些由谁来做呢?运行工具,VScode里就是Code-Runner,别的IDE直接集成了运行工具(比如IDEA,里面集成了专门运行Java的运行工具)这个Code-Runner可以运行多种代码,C/C++、java、python等等。

那么PowerShell在这里是干嘛呢?根据当前编码格式执行二进制文件。

先前执行GBK文件显示乱码,后来我直接把可执行文件格式改成UTF-8乱码就解决了。这一点可以证实我的猜想。

至于为什么我修改了PowerShell的编码格式还是乱码(不管是直接win+r打开PowerShell还是VScode把默认终端改成PowerShell),我说了这应该是PowerShell本身的问题。

如上图,至于为什么UTF-8编码的文件用代码页为936的cmd.exe执行为什么不会乱码?

因为UTF-8编码直接把这几个字变成了中文,然后编码格式为GBK(代码页为936)的cmd.exe看不懂这几个字,但是还是要输出,然后直接输出了。

但是用GBK编码不认识这几个字,只是一味转换成相对应的乱码,但是编码格式为UTF-8的cmd.exe认识啊,根据乱码反推出中文,然后输出。   

是不是很有道理?[狗头保命]

先就这样吧。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐