vs、utf-8、utf-8bom乱码分析及实测

news2024/11/30 14:40:19

1、系统默认控制台命令行编码 

windows命令行默认的编码是ANSI,中文系统下则就是GBK,GBK是对GB2312编码的扩展兼容GB2312,可以等同理解为就是GB2312。

 

2、vs2022默认新建项目编码

vs默认项目文件编码格式为UTF-8 BOM

默认字符集 Unicode

最终在默认命令行解析为gb2312编码的字符串,正确显示未乱码,但字符串不是UTF-8编码

 

3、vs指定执行字符集的两种方法:/utf-8编译选项和旧宏

新编译选项会覆盖旧宏,所有新编译选项等同于新编译选项+旧宏,vs2015及以后版本建议用新编译选项即可。

旧宏:#pragma execution_character_set("utf-8")

新编译选项:/utf-8

对于C++项目,/utf-8编译选项的支持是从Visual Studio2015版开始,位置如下图,/utf-8 选项将源字符集和执行字符集指定为使用 UTF-8 编码的字符集。

4、源码文件编码为UTF-8时,三种情况如下:

4.1、UTF-8 未指定

源码文件格式为UTF-8

默认字符集unicode

默认命令行输出为乱码,虽已被解析为utf-8但末尾\n也被解析成字符串

4.2、UTF-8 使用新编译选项/utf-8(包含新编译选项+旧宏)

源码文件格式为UTF-8

默认字符集unicode

命令行默认编码输出为乱码但实际为正确utf-8字符串

依据:在命令行utf-8编码模式下输出正确字符串 

 

 

 4.3、UTF-8 指定执行字符集旧宏

第5行使用旧宏#pragma execution_character_set("utf-8")

文件编码格式为UTF-8

默认命令行输出为乱码且为不可读字符串

 5、源文件编码为UTF-8 bom时,三种情况如下:

5.1、UTF-8 bom未指定

源码文件格式为UTF-8 bom

默认字符集unicode

默认命令行输出被解析为gb2312的字符虽未乱码但不是utf-8

5.2、UTF-8 bom使用新编译选项/utf-8 (包含新编译选项+旧宏情况) 

源码文件格式为UTF-8 bom

默认字符集unicode

默认命令行输出乱码,但已经被解析为标准UTF-8编码的字符串;

(因为命令行默认为改变2312所有看似乱码,实际乱码内容对应在4.2图2中演示过)

5.3、 UTF-8 bom使用旧宏

源码文件格式为UTF-8 bom

默认字符集unicode

默认命令行输出乱码,但也已经被解析为标准UTF-8编码的字符串;

 6、汇总

 7、总结

本篇讨论的重点是采用什么编码格式对输出的格式要清楚否则越转越乱。

1、微软还是那个bom派,UTF-8 bom支持了两种输出情况, 默认支持无需宏但输出解析为gb2312,另一种加宏或者/utf-8选项都会解析为标准utf-8;

2、标准utf-8项目,也就是不带bom的utf-8,别挣扎了就一种情况,编译选项/utf-8加上,输出就是utf-8,仅有此种方式靠谱统一;

 

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

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

相关文章

MNIST数据集导出

MNIST数据集导出 文章目录 MNIST数据集导出1、 MNIST数据集介绍2、 MNIST数据集下载2.1 使用Pytorch自带的MNIST数据集 3、 MNIST数据集解析3.1 训练集图片文件解析规则3.2 训练集标签文件解析规则3.3 测试集图片文件解析规则3.4 测试集标签文件解析规则 4、 MNIST数据集转图片…

动手学深度学习31 深度学习硬件 CPU和GPU

动手学深度学习31 深度学习硬件 CPU和GPU CPU和GPU主频 QA PPT: https://courses.d2l.ai/zh-v2/assets/pdfs/part-2_1.pdf 视频: https://www.bilibili.com/video/BV1TU4y1j7Wd/?p2&spm_id_frompageDriver&vd_sourceeb04c9a33e87ceba9c9a2e5f09…

nginx ws长连接配置

nginx ws长连接配置 http根节点下配上 map $http_upgrade $connection_upgrade {default upgrade; close;}如下: server服务节点下,后端接口的代理配置 proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connec…

2. 面向对象编程推导

1. 面向过程编程 面向过程编程(Procedure-Oriented Programming, POP): 是一种关注于解决问题步骤或过程的编程范式.面向过程编程核心思想: 将复杂问题分解为一系列简单, 可执行的步骤(即过程或函数), 并按照特定的顺序依次执行这些步骤, 直到问题得到解决. 每个步骤(过程或函…

compose for desktop

then 叠加修饰符功能的作用 val reusableModifier Modifier.fillMaxWidth().background(Color.Red).padding(12.dp)// Append to your reusableModifier reusableModifier.clickable { /*...*/ }// Append your reusableModifier otherModifier.then(reusableModifier)https:…

springboot物流管理系统-计算机毕业设计源码00781

摘要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对物流管理系统等问题,对如何通过计…

时间处理获取交易日(考虑兼容性问题)

在获取交易日时间的处理上,出现了苹果14不兼容的问题,就这个问题记录下。 一、获取交易日的代码 封装了一个js文件,在untils目录下,先看代码,然后我讲下思路。 // 获取节假日数据 import { getCalendarHolidays } …

使用脚手架创建vue2项目(关闭eslint语法检查 、运行项目时自动打开网址、src文件夹简写方法)

使用脚手架创建vue2项目会默认安装的插件(eslint) 这个插件是检查语法的。 假设我们在main.js中定义了一个变量,没有使用 eslint 就会检测出错误 (事实是我们并没有写错而是eslint 给我们判断是错的,所以这样会很麻烦&#xff…

怎么监视员工电脑屏幕?电脑监控软件监控屏幕的六个步骤

监视员工电脑屏幕通常涉及使用专门的电脑监控软件,这些软件设计用于帮助企业管理人员合法合规地监督员工的工作状态、提高工作效率并确保信息安全。以下是实施员工电脑屏幕监视的一般步骤和注意事项: 1. 选择合适的监控软件 首先,选择一款适…

Idea多线程调试

在 IntelliJ IDEA 中调试多线程应用程序可能会有些复杂,因为多个线程可能会同时运行和交互。不过,IDEA 提供了一些强大的工具来帮助你进行多线程调试。以下是一些关键步骤和技巧,帮助你有效地调试多线程应用程序: 创建一个示例多线…

查分易成绩查询入口

今天我来分享一个老师超实用的小技巧,那就是如何用查分易来打造一个专属的成绩查询入口哦!无论是我们勤奋的学生们,还是关心孩子学习的家长们,都可以轻松查到自己的成绩信息。来来来,让我来一步步教你怎么用查分易搞定…

优雅迷人的小程序 UI 风格

优雅迷人的小程序 UI 风格

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

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

20240612每日前端-------vue3实现聊天室(一)

先上效果图 讲讲布局设计 聊天室大致分三块: 左边导航右边聊天界面主界面 单独调整一下样式:外层friend-box先调整布局为flex,这样方便进行自适应布局,增加背景色为白色,设置边框圆角使得外观更加美观,使…

树状数组:解锁快速排名的高效利器

文章目录 引言一、快速排名问题概述二、树状数组的应用树状数组概述数据结构初始化查询排名更新排名示例代码 总结参考 引言 在大规模数据排名问题中,树状数组可以用来高效地实现快速排名查询和更新操作,特别是在处理动态变化的数据集时。使用树状数组可…

如何舒适的使用VScode

安装好VScode后通常会很不好用,以下配置可以让你的VScode变得好用许多。 VScode的配置流程 1、设置VScode中文2、下载C/C拓展,使代码可以跳转3、更改编码格式4、设置滚轮缩放5、设置字体6、设置保存自动改变格式7、vscode设置快捷代码 1、设置VScode中文…

Android studio如何导入项目

打开解压好的安装包 找到build.gradle文件 打开查看gradle版本 下载对应的gradle版本Index of /gradle/(镜像网站) 下载all的对应压缩包 配置gradle的环境变量 新建GRADLE_HOME 将GRADLE_HOME加入到path中 将项目在Android studio中打开进行配置 将gr…

手撕设计模式——计划生育之单例模式

1.业务需求 ​ 大家好,我是菠菜啊。80、90后还记得计划生育这个国策吗?估计同龄的小伙伴们,小时候常常被”只生一个好“”少生、优生“等宣传标语洗脑,如今国家已经放开并鼓励生育了。话说回来,现实生活中有计划生育&…

【Kadane】Leetcode 918. 环形子数组的最大和【中等】

环形子数组的最大和 给定一个长度为 n 的环形整数数组 nums ,返回 nums 的非空 子数组 的最大可能和 。 环形数组 意味着数组的末端将会与开头相连呈环状。形式上, nums[i] 的下一个元素是 nums[(i 1) % n] ,nums[i] 的前一个元素是 nums…

SortTable.js + vxe-table 实现多条批量排序

环境: vue3+vxe-table+sorttable.js 功能: 实现表格拖动排序,支持单条排序,多条排序 实现思路: sorttable.js官网只有单条排序的例子,网上也都是简单的使用,想要实现多条排序,就要结合着表格的复选框功能,在对其勾选的行统一计算! 最终效果: 实现代码 <template>…