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默认编码格式三个阶段历史

阶段一 vs2002到2017ANSI为主 混乱阶段

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 的编码格式;

从2011年到现在整整13年了,微软vs大版本发布了五六个了,但仍然继续固执己见的坚持只有带BOM的UTF-8才是真正的大一统,然而最新版的win11 23h2的默认组件记事本txt的默认编码格式却已经被微软默认成了不带bom的UTF-8.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Golang——RPC

一. RPC简介 远程过程调用(Remote Procedure Call,RPC)是一个计算机通信协议。该协议运行于一台计算机的程序调用另外一台计算机的子程序,而程序员无需额外的为这个交互作用编程。如果涉及的软件采用面向对象编程,那么远程过程调用亦可称作远…

Sublime Text 4 - 前端代码编辑的卓越之选

Sublime Text 4 是一款备受赞誉的前端代码编辑神器,无论是在 Mac 系统还是 Windows 系统上,都展现出了其独特的魅力和强大的功能。 Sublime Text 4 拥有简洁而直观的用户界面,让开发者能够快速上手并沉浸于代码编写的过程中。它提供了高度可…

二叉树构建

由于二叉树的左右子树和整树相似(即子问题和原始问题相似),因此多考虑使用递归的方法解决问题。 leetcode 108.将有序列表转换为二叉树 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡…

Python数据分析个人笔记6

目录 Function application读取数据查看数据信息自定义函数拆分square自定义函数拆分years自定义函数拆分floor自定义函数拆分followInfo1、获取followInfo列2、对followInfo列进行拆分3、提取关注人数4、提取带看次数5、添加到house的最后两列 缺失值处理house.infohouse.drop…

夹层辊能否解决智能测径仪量程不足的问题?

关键字:智能测径仪,测径仪夹层辊,测径仪量程,夹层辊作用,测径仪量程不足, 智能测径仪是一种高精度的测量设备,主要用于检测线材、管材等圆柱形物体的直径尺寸。在测径仪中,夹层辊是测径仪的关键部件之一,它负责引导和支撑被测物体&#xff0c…

三星堆青铜奇迹:揭秘三千年前的先进制造技术

在四川广汉的三星堆遗址中,考古学家们发现了一件令人叹为观止的青铜龟背形网格状器。这件青铜器的制造技术,在当时的技术条件下显得尤为先进,引发了人们对三星堆文明高度发达科技水平的猜测。 青铜是由铜和锡按一定比例混合而成,这…

基于Python的信号处理(包络谱,低通、高通、带通滤波,初级特征提取,机器学习,短时傅里叶变换)及轴承故障诊断探索

Python是一种广泛使用的解释型、高级和通用的编程语言,众多的开源科学计算软件包都提供了Python接口,如计算机视觉库OpenCV、可视化工具库VTK等。Python专用计算扩展库,如NumPy、SciPy、matplotlab、Pandas、scikit-learn等。 开发工具上可用…

警务反诈RPA的用途:提高反诈骗工作效率,保护公众财产安全

互联网时代,电信诈骗手段不断翻新,作案地域广,打击难度大,反诈工作迎来巨大的挑战。为了提升办案效率,精准打击犯罪,以科技赋能反诈工作、构建反诈新格局迫在眉睫。而RPA机器人由于能够快速、准确地处理大量…

10倍速下载!IDM下载器让你的网速飞起来!

在数字化时代,下载工具成为日常工作和生活中不可或缺的一部分。Internet Download Manager(IDM)作为一种广受欢迎的下载加速器,凭借其高效的下载速度、断点续传和多线程技术等特点,深受用户喜爱。然而,随着…

个股期权103call是什么意思?

个股期权103call是什么意思? 在金融市场中,个股期权作为一种金融衍生工具,为投资者提供了多样化的投资策略。其中,“103call”这一术语,特指一种特定的期权交易策略,它涉及到看涨期权与虚值状态。 文章来…

(CVPR,2024)Adversarial Prompt Tuning:只需一个提示词就足以提升预训练视觉-语言模型的对抗性鲁棒性

文章目录 相关资料摘要引言对抗性鲁棒性的文本提示CLIP回顾 方法提示参数化提示优化 实验 相关资料 论文:2403.01849] One Prompt Word is Enough to Boost Adversarial Robustness for Pre-trained Vision-Language Models (arxiv.org) 代码:TreeLLi/…

【干货】SaaS出海业务必看的五个海外流量渠道

一、Product Hunt 月访客约500万 Product Hunt拥有巨大的用户流量和影响力,其全球Alexa排名在前四千以内。许多知名的产品,如ChatGPT、Notion等,都在这里成功上线并获得广泛关注。在美国有什么新产品(不论网站、APP还是插件&…

AI口语练习软件的技术难点

实现AI口语练习软件是一项复杂的任务,需要攻克多项技术难点。随着人工智能技术的不断发展,AI口语练习软件将变得更加智能和人性化,为用户提供更加有效的口语练习体验。北京木奇移动技术有限公司,专业的软件外包开发公司&#xff0…

商家转账到零钱申请内幕最详细解说

商家转账到零钱开通过程中,微信支付官方提供了多达十一种不同的转账场景,这些繁杂的选项经常让商家感到迷茫,难以选择最适合的场景。尤其是申请被拒后,一些商家会试图通过更换场景来碰运气。 不过根据我们上万例的开通经验来看&a…

FPGA设计从初级迈向高级的必备书籍:《FPGA设计实战演练(高级技巧篇)》(可下载)

在FPGA设计的广阔天地中,每一位工程师都是探索者,他们用代码编织逻辑,用创意构建系统。然而,随着技术的发展和系统需求的提升,传统的设计方法已难以满足现代FPGA设计的需求。《FEGA设计实战演练(高级技巧篇…

设置ingress的会话保持

设置ingress通过cookie的会话保持 1.创建ingress,正常填写转发规则 2.添加3个注释 nginx.ingress.kubernetes.io/affinity: cookie nginx.ingress.kubernetes.io/affinity-mode: persistent nginx.ingress.kubernetes.io/session-cookie-name: SESSION #切记&…

细节决定成败!2024年谷歌SEO实战指南

2024年,谷歌搜索引擎算法再次迎来更新,对网站的综合质量和细节优化更加重视。这引发了SEO圈的热议,有人认为细节优化至关重要,也有人对此嗤之以鼻。 误区:很多人做独立站优化以为通过SEO优化,有一个高招能…

为什么要学习Flink系统管理及优化课程?

Flink系统是一种流式处理框架,能够高效地处理大规模数据流。然而,要确保Flink系统的正常运行,就需要进行系统管理和优化。系统管理是指对Flink集群的监控、调度和维护,而系统优化则是指通过调整参数和优化算法,提高Fli…

Python-random模块

一、random模块的用法 import randomprint(random.random()) # 不需要传参,random 返回0-1随机小数print(random.uniform(1, 10)) # 需要传参,返回参数区间的随机小数print(random.randint(-100, 100)) # 需要传参,返回参数区间的随机整数…

腾讯云SSL证书获取及Nginx配置教程

前言 很多人应该都有属于自己网站,刚开始基本是只能用http进行访问,无法使用https安全访问,但是随着网络安全意识的不断提高,越来越多的网站开始使用HTTPS协议来保护用户的数据安全,SSL证书是实现HTTPS协议的关键组件,本文将讲解如何在腾讯云上获取SSL证书,并配置到Ngi…