VS2017新建windows控制台程序打印中文乱码问题(纯转载)

最近刚换上VS2017,由于手头又要做个MFC的程序,所以写控制台程序做功能测试,然后发现居然乱码了。

于是用VS2017新建windows控制台应用程序,在main函数种加一句printf("你好");后,运行结果依然乱码

用notapad++打开该文件后,点击菜单栏的编码一项,发现是UTF-8无BOM格式编码,然后改成以ANSI格式编码后

也就是说VS是用UTF-8来编码代码文件的,编译出的程序中字符串也是按照UTF-8编码的,而控制台却是按照ANSI编码来理解的。

打个比方,A用0x00代表“是”,B用0x00代表“否”,A发送0x00给B,然后B显示的是“否”。

那么先说解决方案吧,也就是让VS对文件用ANSI编码就行了,在网上搜索了一番后很轻松地找到了解决方案

VS菜单项的工具-->自定义,打开“自定义”对话框,然后选中“命令”选项卡,点击“添加命令”按钮

然后在[文件]种找到[高级保存选项],点确定,可以发现VS菜单栏多了高级保存选项一栏,只要光标在代码文件种,就可以点击该菜单项。

把编码改成简体中文(GB2312),然后重新编译运行,显示就正确了。

在cmd窗口种输入chcp命令也可以看到,windows命令行窗口的活动代码页是936。

当然,我把修改前的文件Project2.cpp和修改后的文件Project1.cpp导入进了Linux系统里,用locale命令可以看到系统默认是以UTF-8编码

$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

用file命令可以看到

$ file Project1.cpp
Project1.cpp: C source, ISO-8859 text, with CRLF line terminators
$ file Project2.cpp
Project2.cpp: C source, UTF-8 Unicode text, with CRLF line terminators

一个是ISO-8859,一个是UTF-8,现在UTF-8是大势所趋,像MFC的字符串类CString早在十年前的VS就是CStringW了(即MFC项目种默认编码是UTF-8),只是在之前的VS版本种,控制台程序的编码还是适应命令行窗口的。

另外注意,后半句,line terminators(换行符)是CRLF。再回到刚才的高级保存选项对话框

在windows中换行符是"\r\n",而Unix系(包括Linux)的换行符是"\n",VS2017为了支持其他系统,在高级保存选项中可以设置编码来进行兼容。

分类: VC/MFC

VS2017中文乱码相关推荐

  1. 完美解决c# 连接oracle US7ASCII字符中文乱码 亲测

    客户端:win10 64位 vs2017,服务器端linux oracle US7ASCII字符. 因单位数据编码不能改变,故测试了很多办法,真是找了很多解决,最终找到了比较可以的一个. 1.下载do ...

  2. QT5 界面截图保存到本地+输出PDF/WORD格式文档+QT界面中文乱码及输出PDF中文乱码的解决(亲身实践并且成功)

    最近做了一个和QT5有关的项目,遇到很多问题也学习到不少,特意写下来希望帮到更多的人.(我的版本VS2017+QT5.12.0) 一.QT5截图并保存到本地 在头文件添加必须项 #include &l ...

  3. 编码(ACSII unicod UTF-8)、QT输出中文乱码深入分析

    总结: 1. qt输出中文乱码原因分析 qt的编程环境默认是utf-8编码格式(关于编码见下文知识要点一): cout << "中文" << endl; 程 ...

  4. SpringSecurity安全验证中文乱码问题

    使用SpringSecurity做安全验证时发现form表单中提交中文名会出现乱码问题. 原因是因为我在web.xml配置文件中将springSecurityFilterChain拦截器放在了 cha ...

  5. httpclient工具类,post请求发送json字符串参数,中文乱码处理

    在使用httpclient发送post请求的时候,接收端中文乱码问题解决. 正文: 我们都知道,一般情况下使用post请求是不会出现中文乱码的.可是在使用httpclient发送post请求报文含中文 ...

  6. 关于HttpClient上传中文乱码的解决办法

    使用过HttpClient的人都知道可以通过addTextBody方法来添加要上传的文本信息,但是,如果要上传中文的话,或还有中文名称的文件会出现乱码的问题,解决办法其实很简单: 第一步:设置Mult ...

  7. Servlet、MySQL中文乱码

    1.Servlet中文乱码: 在doPost或doGet方法里,加上以下两行即可: response.setContentType("text/html;charset=UTF-8" ...

  8. android java 中文乱码_android读写中文如何避免乱码详解

    前言 android读取文件中文出现乱码的原因无非就是,读取文件的字符格式与写如文件的格式不一致.因此,避免中文乱码,要在写入文件的时候按照一定的格式写入,读取的时候按照一定的格式读取.这样对应就不会 ...

  9. java servlet 参数乱码_JSPServlet处理参数中的中文乱码总结

    从form表单提交信息到一个JSP页面或者一个Servlet进行处理的时候,提交的中文信息若不加处理的话就会显示乱码,如一串???.现在通过一个例子来进行总结如下: 写一个用户信息提交页面,通过这个页 ...

最新文章

  1. JAVA中LinkedLockingQueue的简单使用
  2. Fiber 为什么做并发IO的时候更加高效
  3. blur失焦方法会触发两次_中央空调维修过程中,晶闸管和电容器的检测方法
  4. chrome 浏览器自保留端口、安全端口有哪些?chrome不能访问某个端口的环境网址,但是其它的浏览器可以访问原因及解决办法
  5. troubleshoot之:GC调优到底是什么
  6. linux ubuntu 关于vim得一些基本命令
  7. [C++] 在连续统上的重复性质:滑动窗口
  8. Spring Cloud源码分析——Ribbon客户端负载均衡
  9. python如何运行程序_01
  10. FM1288的AEC调试经历,持续更新
  11. 《软件设计师》考点分布
  12. Graphical Model(概率图模型)的浅见
  13. 计算机平面设计的专业技能,计算机平面设计专业学生技能培养途径
  14. 学术论文中的Introduction与Background
  15. Kali安装中文输入法
  16. Ip以及主机名称配置
  17. VirtualBox安装CentOS5.5 Insert Guest Additions CD image…(HOST+D)
  18. 个人计算机操作系统支持多用户多任务,windows10是一个多用户多任务操作系统吗...
  19. Android计算器功能的实现
  20. 2023届双非硕士四个月秋招历程总结

热门文章

  1. 中文语音识别引擎,盘点中国语音识别技术公司排名
  2. Go+Wails学习笔记(一)环境搭建与配置
  3. nodemon启动报错
  4. Latex 画图x, y轴格式
  5. web开发 简单的html2
  6. 小程序带参数二维码生成接口
  7. Flink教程(30)- Flink VS Spark
  8. 惠惠购物助手竟是“流氓软件”?因流量劫持被阿里告上法庭
  9. 腾讯地图的签名校验报错的解决方法---vue-jsonp
  10. 【Microsoft Store打不开(Microsoft Store需要联网。你似乎没有联网。)】