VS2017运行程序出现乱码解决方法
2017-09-23 15:12
471 查看
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编码
用file命令可以看到
一个是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,由于手头又要做个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
相关文章推荐
- VS2010运行正常的控制台程序在VS2015中出现乱码的解决方法
- SlickEdit在64bit Ubuntu下运行vsinst安装程序出现"No such file or directory"的解决方法
- 运行VS2013编译成功后出现:无法启动程序“.exe” 系统找不到指定文件的问题的解决方法
- 转 VS2005程序运行时出现MSVCP80D.dll not found错误解决方法(VS 2005的一个“Bug”)
- web服务器程序运行出现乱码问题的解决方法
- 在WIN10系统下运行VS2013编译成功后出现:无法启动程序“.exe” 系统找不到指定文件的问题的解决方法
- VS使用进程调试出现“没有正确安装调试器。请运行安装程序安装或修复调试器”的错误,解决方法。
- VS2005运行程序时出现“没有找到MSVCP80D.dll"错误的解决方法
- 移植boa后运行CGI程序可能出现的原因及解决方法
- Vista 下先安装 VS 再装 IIS 7 运行出现 500.19 Error 的解决方法
- 在GHOST的WINXPSP2安装SQL SERVER2000个人版时出现“以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装之前,必须重新启动计算机。”错误的解决方法
- 安装sql server 2000时出现:以前的某个程序安装已在安装计算机上创建挂起的文件操作.运行安装程序之前必须重新启动计算机.的解决方法
- py2exe 编译的程序运行时出现Runtime Error的解决方法
- Vista 下先安装 VS 再装 IIS 7 运行出现 500.19 Error 的解决方法
- 安装程序时出现乱码解决方法~~AppLocale作祟
- 转载 本机运行x程序出现:Can't open display 原因及其解决方法
- 解决FA运行折旧程序时出现:Cause: fadgbi failed....错误的方法
- 安装SQL Server 2000的时候出现“以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机”的解决方法
- 在vs2005里把html里面的部分英文代码改为中文后再运行出现乱码的解决方法
- Vista 下先安装 VS 再装 IIS 7 运行出现 500.19 Error 的解决方法 -