Visual Studio和BOM历史渊源

 今天看文档无意间碰到了微软对编码格式解释,如下链接:

Understanding file encoding in VS Code and PowerShell - PowerShell | Microsoft LearnConfigure file encoding in VS Code and PowerShellicon-default.png?t=N7T8https://learn.microsoft.com/en-us/powershell/scripting/dev-cross-plat/vscode/understanding-file-encoding?view=powershell-5.1

下图为节选,微软表达的意思很明确UTF-8确实已经成为Llinux乃至行业主流,但windows历史上默认的文件编码格式都是是 Windows-1252,可以等同理解为即 ANSI 编码,这一点已经不能改变,这就是为什么vs、命令行和windows记事本等默认都是本地化格式改变GB2312。


后来微软开始支持Unicode,虽然BOM是可选但微软认为应该选上这样编译器就可以凭借这个BOM确定你要用Unicode编码了,即微软认可的UTF-8是UTF-8 BOM(vs默认编译器也被设计为看源码文件有没有bom标识没有对不起不认识按默认ANSI处理了) ,它认为Linux没有选BOM是因为约定俗称了大家都不带bom而已(这仅仅是微软自认为),依然推荐开发者首选BOM。


事实上,在 Linux 等类 Unix 系统中,默认不使用 BOM 的主要原因是 BOM 在 UTF-8 编码中并不是必须的,并且在某些情况下可能会导致一些问题。在 Unix 系统中,文本文件的编码通常由文本编辑器或其他工具根据文件头部的字符集声明来自动识别,而不是依赖于 BOM。

1、vs不同时期版本默认项目编码格式对比

下图为vs2019默认新建C++ 控制台项目,默认文件编码格式为UTF-8 BOM

下图为VS2010默认新建C++ 控制台项目,默认文件编码格式为GB2312

2、vs默认编码格式三个阶段历史

阶段一 vs2022到2017混乱阶段

Visual Studio 2002开始到2003,2005,2008,2010,2012,2013,2015,2017共九个版本,默认的文件编码格式可以根据不同的国家/地区设置而有所不同。一般来说,对于英语和西方国家的用户,默认的文件编码格式都是是 Windows-1252,即 ANSI 编码。而对于一些非西方国家的用户,可能会根据当地的字符集设置而选择不同的默认编码格式,比如 GB2312(简体中文)、Shift-JIS(日文)、EUC-KR(韩文)等;

阶段二 vs2010首次UTF-8 BOM

从 Visual Studio 2010 开始,微软逐渐开始将默认的文本文件编码格式逐步转向 Unicode,以支持更多语言和更好地支持国际化。MFC 库提供了更多的 Unicode 相关类和函数,使得开发者可以更方便地处理 Unicode 字符串和文本,也支持在源代码中使用 Unicode 字符串(如 wchar_t 类型的字符串)等;

最终,Visual Studio 2010 SP1中引入了新的编码设置选项,允许开发者在创建新项目时选择默认的文件编码格式。虽然默认文件编码格式仍然是 ANSI,但是开发者可以选择将其更改为 Unicode 格式(UTF-8 或 UTF-16)。

总结:支持了UTF-8 BOM但未敢默认

 阶段三 vs2019转正UTF-8 BOM

Visual Studio 2019 在 Unicode 方面继续增强了对多语言、国际化和全球化的支持,正式将默认文件编码格式更改为 UTF-8 with BOM,这使得创建的新项目和文件都采用了 UTF-8 编码,以更好地支持多语言和 Unicode 字符。

总结:VS2019正式让UTF-8 BOM转正为默认文件编码格式

3、现状——陷入永无休止的循环

vs2019开始到vs2022微软继续坚持认可UTF-8 BOM的方式,原因最大可能是历史包袱,带 BOM 的 UTF-8 格式可以与一些旧版本的Windows系统和其他软件更好地兼容。

现实世界UTF-8已经是一种广泛支持的Unicode 编码格式,在跨平台开发中具有很好的兼容性,大家已经成为习惯。开发者继续尝试脱离带bom的UTF-8以提高兼容性和跨平台,只能借助vs插件或者手动将项目的文件设置为不使用 BOM 的编码格式;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/23661.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】使用Stable Diffusion实现潜在空间搜索

1、引言 1.1 潜在空间的概念 潜在空间(Latent Space)是在机器学习和深度学习中一个重要的概念,它指的是用于表示数据的一种低维空间。这个空间编码了数据中包含的所有有用信息的压缩表示,通常比原始数据空间的维数更低&#xff…

QT快速下载

去QT官网之后,如下图所示 比如要下载qt-opensource-windows-x86-5.14.2.exe,进入5.14对应的文件夹,找到对应的版本 点击Details, 下载对应的种子,然后通过迅雷下载 个人实测,家庭网络平均18M的速率

vs2022专业版永久密钥

vs2022专业版永久密钥: vs2022专业版永久密钥: Visual Studio 2022 Enterprise:VHF9H-NXBBB-638P6-6JHCY-88JWH Visual Studio 2022 Professional:TD244-P4NB7-YQ6XK-Y8MMM-YWV2J

numpy的基本使用

一、NumPy 的主要特性和功能: 多维数组对象(ndarray): NumPy 的核心是 ndarray 对象,它是一个多维数组,可以存储相同类型的元素。ndarray 对象具有固定大小,支持矢量化运算和广播功能&#xff0…

Datetime,一个 Python 的时间掌控者

大家好!我是爱摸鱼的小鸿,关注我,收看每期的编程干货。 一个简单的库,也许能够开启我们的智慧之门, 一个普通的方法,也许能在危急时刻挽救我们于水深火热, 一个新颖的思维方式,也许能…

精选网络安全书单:打造数字世界的钢铁长城!

目录 1.前言 2.书单推荐 2.1. 《内网渗透实战攻略》 2.2. 《Kali Linux高级渗透测试(原书第4版)》 2.3. 《CTF那些事儿》 2.4. 《权限提升技术:攻防实战与技巧》 2.5. 《数字政府网络安全合规性建设指南:密码应用与数据安全…

#01 Stable Diffusion基础入门:了解AI图像生成

文章目录 前言什么是Stable Diffusion?Stable Diffusion的工作原理如何使用Stable Diffusion?Stable Diffusion的应用场景结论 前言 在当今迅速发展的人工智能领域,AI图像生成技术以其独特的魅力吸引了广泛的关注。Stable Diffusion作为其中的一项前沿技术&#…

【Java毕业设计】基于JSP+SSM的物流管理系统

文章目录 目 录摘要ABSTRACT1 概述1.1 课题背景及意义1.2 国内外研究现状1.3 本课题主要工作 2 系统开发环境2.1 JSP技术2.2 JavaScript2.3 B/S结构2.4 HTML简介 3 系统分析3.1 可行性分析3.1.1 技术可行性3.1.2操作可行性3.1.3 经济可行性3.1.4 法律可行性 3.2系统流程设计3.2…

Python文档生成工具库之alabaster使用详解

概要 在编写文档时,美观和易读性是两个重要的方面。Sphinx 是一个广泛使用的文档生成工具,而 Alabaster 是 Sphinx 默认的主题。alabaster 主题以其简洁优雅的设计和易用的配置选项受到广大用户的欢迎。本文将详细介绍 alabaster 库,包括其安装方法、主要特性、基本和高级功…

Go实战 | 使用Go-Fiber采用分层架构搭建一个简单的Web服务

前言 📢博客主页:程序源⠀-CSDN博客 📢欢迎点赞👍收藏⭐留言📝如有错误敬请指正! 一、环境准备、示例介绍 Go语言安装,GoLand编辑器 这个示例实现了一个简单的待办事项(todo&#xf…

halo进阶-主题插件使用

开始捣鼓捣鼓halo,换换主题,加个页面 可参考:Halo 文档 安装/更新主题 主题如同壁纸,萝卜青菜各有所爱,大家按需更换即可; Halo好在一键更换主题,炒鸡方便。 安装/更新插件 此插件还扩展了插件…

【数据结构】C语言实现二叉树的基本操作——二叉树的遍历(先序遍历、中序遍历、后序遍历)

C语言实现二叉树的基本操作 导读一、二叉树的遍历二、先序遍历三、中序遍历四、后序遍历五、结点序列六、递归算法与非递归算法的转化结语 导读 大家好,很高兴又和大家见面啦!!! 通过前面的介绍,我们已经认识了二叉树…

1.6T模块与DSP技术的演进

近日,光通信行业市场机构LightCounting在市场报告中指出,去年的模块供应商已经展示了首批1.6T光学模块的风采,而今年,DSP供应商更是着眼于第二代1.6T模块设计的未来。这些前沿技术的突破,不仅代表了数据传输速度的飞跃…

三十九、openlayers官网示例Extent Interaction解析——在地图上绘制范围并获取数据

官网demo 地址: Extent Interaction 在openlayers中可以使用ExtentInteraction添加交互事件,配合shiftKeyOnly实现按住shift键绘制边界区域。 const map new Map({layers: [new TileLayer({source: new OSM(),}),],target: "map",view: new …

开源!过程控制与自动化系统

软件介绍 ProviewR是一个基于GPL许可的过程控制与自动化系统,最初由瑞典的Mandator和SSAB Oxelsund开发。作为一个成熟、集成且低成本的自动化解决方案,ProviewR在以Linux作为操作系统的标准PC上运行。该系统包含了顺序控制、调整、数据采集、通信、监控…

AI大模型语料库

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 语料库概述 语料库(Corpus)是一个存储了大量真实语言使用实例的集合,这些实例可以是文本、语音、视频等多种形式的语言数据。语料库通常…

ESP32 Error creating RestrictedPinnedToCore

随缘记,刚遇到,等以后就可能不想来写笔记了。 目前要使用到音频数据,所以去用ESP-ADF,但在使用例程上出现了这个API有问题,要去打补丁。 但是我打补丁的时候git bash里显示not apply,不能打上。 网上看到…

物联网开发tcp协议之——netty拆包问题

1.前言 tcp协议是物联网开发中比较常见的一种通信协议,而netty则是一tcp通信协议中一个比较优秀的框架。tcp协议是一种长连接的协议,是流式传输的,开发过程中最长遇见的问题就是拆包粘包问题。我目前对接过的物联网系列有智能家居设备&#…

神奇的python语法

今天发现一个神奇的语法规则 import numpy as np aa np.zeros((4,3)) print(aa) print(aa .shape[0] * aa. shape[1])结果是不报错的 结果是正常运行的 包括在jupyter里面,这种写法还是没有报错

氧兜:新一代隔热防晒膜,打造您的健康氧吧,开启品质生活新篇章

随着人们对生活品质追求的不断提升,氧兜品牌凭借创新科技,为您带来了新一代隔热防晒膜。它不仅具备卓越的隔热防晒功能,更能通过释放负氧离子,为您打造一个居家办公或出行环境的氧吧,让您的生活更加健康、舒适。 一、…