首页 - 新闻 - vs2019输出乱码_

vs2019输出乱码_

2023-09-29 11:28

现象:VS2019控制台输出中文乱码

第一种解决方案:安装插件Format 保存后重启VS2019即可生效

(!!!注意:别安装错了,我一开始就装错了UTF-8(No BOM)。装过这个插件的同学,记得删除,不然还是会出现问题.)

第二种解决方案:将VS2019编码设置为Unicode(UTF-8生成签名)-代码页65001

看清楚:必须签字。参考b站视频:C语言问题VS2019新建的C语言文件默认为GBK-936编码集或UTF8编码集,不带BOM。如何将其更改为默认的 UTF8(带有 BOM)-65001。祝愿大家在学习和工作上不断进步。顺利。

文章目录

前言解决方案

结论

前言

今天写C++算法实验时遇到了

VS2019控制台中文输出乱码。该文件包含当前代码页 (936) 无法表示的字符。请以Unicode格式保存文件,以免数据丢失

关于中文编码的问题,一开始我在网上搜索了各种方法,包括

使用保存时的格式修改控制台的编码字符集以更改高级保存选项

等方法,却发现都不起作用(也就是说对我的情况没有影响),困扰了我一晚上。其实后来我解决之后,发现之前的方法还是有用的,只是我的情况有点特殊,所以我就告诉你了。

后来在安装和卸载扩展时,无意中发现我的VS2019扩展中安装了一个奇怪的东西。

这强制UTF-8(无BOM),好家伙,原来是你的问题。难怪我每次都用BOM的编码格式设置UTF-8(即带签名的UTF-8)。在VS2019中修改保存后,会变成UTF-8(即UTF-8无符号),这样会导致乱码。不管你怎么修改编码格式,都是没有用的。只要你在VS2019中保存,就会强制为UTF-8无符号编码格式。

解决方案

所以我卸载了这个扩展。

用BOM的编码格式再次更改为UTF-8(可以通过VS2019中的高级保存选项更改或通过记事本保存更改编码格式),然后运行发现中文可以成功显示,不再有乱码了,在VS2019中修改保存后就没有问题了。

至此,困扰我一晚上的问题终于解决了。可能是我在网上搜索后为了解决某个问题才安装了这个扩展,然后就没有关注了。我现在才发现这个问题。希望大家在解决一些问题、使用网上的一些解决方案时,一定要了解其原理及其作用。不要只是复制和粘贴或一步步进行。做的时候一定要思考,不然以后很容易出现一些奇怪的问题。问题。

结论

非常感谢您的阅读,欢迎在评论区留言讨论!

前言

在VS2019中,如果代码中含有中文字符串定义或注释,会导致各种莫名其妙的编译错误。即使你运气好,编译没有错误,也会遇到控制台打印中文乱码的问题,让人摸不着头脑。感觉有点烦。

编译问题

1。代码中定义的中文字符串常量导致编译错误:“常量中有换行符”; 2、代码中含有中文注释,导致编译错误:找不到XXX(宏、变量)、XXX不是常量/变量等找不到声明导致的问题;

乱码打印问题

代码打印中文字符串,命令提示符下输出乱码;

解决方案,选择以下三种方法之一:

1。修改代码文件格式为带签名的utf-8,这样MSVC编译器就能自动识别并加载utf-8 BOM格式的文件:

使用外部编辑器将代码文件保存为utf8-BOM格式;或者打开代码文件,在VS2019“高级保存选项”中选择代码文件保存格式为“Unicode-With Signature”;

2。修改代码格式:

修改中文字符串和中文注释的格式,在中文末尾添加英文空格,以便MSVC编译器可以加载并编译GBK编码的中文utf-8编码字符串,可以解决编译错误问题而且打印还是乱码;

3。强制指定MSVC编译器加载的代码文件的编码格式:

在VS2019“项目”-“项目属性”对话框-“C/C++”-“所有选项”子页面中,添加“/utf-8”(相当于“其他选项”中的“/source-charset”: utf-8 /execution-charset:utf-8"); 在VS2019“项目”-“项目属性”对话框-“C/C++”-“所有选项”子页面,在“附加选项”源中添加“/”- charset:utf-8 /execution-charset:gbk”(前者表示文件本身的编码,后者表示编译后的字符数组中字节的编码);

总结:

1。如果是新项目,我们推荐方法一,将所有新的代码文件统一为UTF-8 BOM格式; 2、如果是跨平台代码,且文件中包含少量中文注释,可以尝试方法二; 3、如果是已有的历史复杂项目(不使用工具导出的方案),可以尝试方法三,但设置execution-charset时需要注意UI显示和打印的字符串编码要求(可能不一致);

参考信息:

1VS2019 错误“常量中有换行符”错误原因分析2 MSVC文档-设置源和执行字符集为UTF-83 vs 中文注释无法编译