Visual Studio 2017 UTF-8 无 BOM 一站式解决办法
问题背景:最近捡起C++,使用VS 2017平台。因为以前的编程习惯,喜欢使用UTF-8 无 BOM 的编码格式,好让自己的代码全球通用。但是VS 2017 对这个问题不是很友善。但最终找到了解决办法。
问题标签:
UTF-8 无 BOM 乱码;UTF-8 无 BOM "常量中有换行符"错误提示;window cmd UTF-8 无 BOM 显示乱码;
UTF-8 without BOM garbled; UTF-8 without BOM "Line breaks in constants" error message; window cmd UTF-8 without BOM shows garbled characters;
问题解决:
一:解决自己源码的编码格式
方法A(推荐):工具->扩展和更新->联机->搜索 forceutf8 选择No BOM 的那一个。 在你保存文件的时候,这个插件会将文件自动保存为UFT8 无 BOM。


方案B:文件-> 另存为 ->编码保存 选择 UFT-8 无签名


方案C:高级保存选项(默认是隐藏的,可以调出来。方法自行百度或googl...),界面如下

二:设定编译器 在编译 链接 时的编码格式,如果不设置,使用char数组保存字符时,会出现不可理解的错误提示 “常量中有换行符”或等等等问题
(1)在你的解决方案创建完成并打开之后 选定此方案。然后 项目->属性->(最好选择所有配置 所有平台)配置属性->常规->字符集->使用多字节字符集
注意:我自己使用中这个配置感觉并没有效果,但是为了保险起见,还是选择上吧。下面一个步骤比较重要。


(2)在你创建C++的源文件后,才会出现C/C++配置栏。选定解决方案,参考上一步 项目->属性->C/C++->命令行->输入/utf-8并确定。
这一步的解释,可以参考官方文档(推荐使用英文阅读):https://docs.microsoft.com/zh-cn/cpp/build/reference/utf-8-set-source-and-executable-character-sets-to-utf-8?view=vs-2017

三:设置window控制台(又名CMD或命令行窗口)为UTF-8格式,解决显示界面的编码问题
在自己的源代码 加入 system("chcp 65001");如下:
#include <iostream>
#include <string> using namespace std;
int main()
{
system("chcp 65001");
char x[] = "的";
int i = x[];
int j = x[];
int k = x[];
cout << x << endl;
cout << hex << i << endl;
cout << hex << j << endl;
cout << hex << k << endl; string str_out_1 = "你的名字?";
string str_out_2 = "whats your name";
cout << str_out_1 << endl << str_out_2 << endl;
system("pause");
}
结果:

错误的结果(没有写入上面的代码时):

至此完结。欢迎各位前辈指正。
另请求打赏:支付宝:

Visual Studio 2017 UTF-8 无 BOM 一站式解决办法的更多相关文章
- Visual Studio无法查找或打开 PDB 文件解决办法
Visual Studio无法查找或打开 PDB 文件解决办法 用VS调试程序时,有时会在VS底部的“输出”框中提示“无法查找或打开 PDB 文件”.这该怎么解决呢? 下面,我们以VS2013为例,来 ...
- Visual Studio 2010 更新NuGet Package Manager出错解决办法
在Visual Studio 2010的扩展管理器中发现NuGet Package Manger有最新版本更新提示,选择更新安装提示以下错误信息: 2013/4/25 1:11:48 - Micros ...
- Visual Studio 2013 无法启动 IIS Express 的解决办法
关于 ASP.NET Web 开发服务器.本地 IIS和 IIS Express 的区别,请参见<VS2013无法启动IIS Express Web的解决办法>,此文章最后提到的部分,即是 ...
- Visual studio 2010 打开高版本VS工程解决办法
第一步.找到工程项目文件: 第二步.编辑项目文件 找到Format Version 12.00 ,将数字改为11.00 再找到#Visual Studio 14 将数字改为2010 点击保存并关闭 第 ...
- Microsoft visual studio 2015已停止工作最全解决办法
1.重装系统,不到万不得已不要选择...麻烦. 2.使用管理员权限运行VS,部分可能有效. 3.卸载重新安装vs,如果是一些配置问题或许能解决,还有要是卸载的干净可能有效. 4.据说可能是插件有问题造 ...
- Visual Studio Xamarin编译Android项目出错的解决办法
安装完Xamarin后,编译Android项目时,你会发现好长时间进度都不动,当你取消编译后,会发现其实是出错了,就是因在Android项目在第一次编译时要去google网站上下一个andorid s ...
- “Microsoft Visual Studio遇到了问题,需要关闭”解决办法
运行VS2008,打开项目,弹出错误界面 . 解决办法:将项目中的所有设计窗体关闭并保存,重新打开就OK~
- visual studio 2010 "创建控件时出错"解决办法[转]
之前我有在博问里面提问(http://space.cnblogs.com/q/16208/),但一直都没答案.我系统都重装了两次了,可还是出现这样的错误,我很郁闷啊.今天我终于找到原因了. 我写了一个 ...
- visual studio 2017无建模项目?
教一跨行同事学C#,我想从基础的讲一下,也就是最基本的面象对象分析与设计(OOAD),我直接打开我最新安装的 visual studio 2017.准备建一个“建模项目”.结果发现死活找不到?打开一个 ...
随机推荐
- Luogu P1438无聊的序列【线段树/差分】By cellur925
题目传送门 题目大意:维护一个序列,维护区间加等差数列,单点查询的操作. 首先我们肯定是要用线段树来维护了,按照一般的思维局限,我选择了维护序列中的值,但是区间修改的时候由于公差的存在,所以区间修改有 ...
- jQuery EasyUI/TopJUI输入框事件监听
jQuery EasyUI/TopJUI输入框事件监听 代码如下: <div data-toggle="topjui-panel" title="" da ...
- Hive_Hive的数据模型_外部表
Hive的数据模型之外部表 外部表(External Table)- 指向已经在HDFS中存在的数据,可以创建Partition- 它和内部表在元数据的组织上是相同的,而实际数据的存储则有较大的差异. ...
- Jenkins执行yarn install报错:error An unexpected error occurred:"... ... :Unexpected end of JSON input"
解决方式: # cd /usr/local/n/versions/node/11.6.0/lib/(node的安装目录下) # rm -rf node_modules # yarn cache cle ...
- HashMap与TreeMap
package com.jckb; import java.util.Map; import java.util.Set; import java.util.TreeMap; /**TreeMap * ...
- Android 网络提交数据(使用Asynchronous Http Client)
项目主页及简单使用方法http://loopj.com/android-async-http/ 页面布局就不复制了,把主要的Activity记录下来,供自己以后使用: package com.exam ...
- text-transform字母大小写属性设置
text-transform: none: 默认 不设置,全是小写 capitalize: 每个单词以大写字母开头 uppercase: 全部是大写字母 lowercase: 全部是小写字母 in ...
- Kendo MVVM 数据绑定(一) attr
Kendo MVVM 数据绑定(一) attr Kendo UI MVVM 数据绑定支持的绑定属性有 attr, checked, click, custom , disabled,enabled, ...
- html5 02 随记
HTML 02 全局通用属性 id name class style 一. 图像标签 标签名:<img /> 常用属性: Alt -- 代表图像的替代文字 作用: 当图片不显示的 ...
- 零基础逆向工程12_C语言06_switch语句反汇编
12_C语言06_switch语句反汇编 switch语句反汇编 测试环境:VC++6.0 分支少于4的时候没有意义,编译器会生成类似if...else之类的反汇编,不超过三个分支,不会生成索引表. ...