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

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,仅有此种方式靠谱统一;

 

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-06-12 22:22:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-12 22:22:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-12 22:22:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-12 22:22:03       20 阅读

热门阅读

  1. 新型数据库技术一览

    2024-06-12 22:22:03       5 阅读
  2. Matlab 2024a如何切换中英文界面

    2024-06-12 22:22:03       8 阅读
  3. 聊一聊线程池

    2024-06-12 22:22:03       11 阅读
  4. EMI电路

    EMI电路

    2024-06-12 22:22:03      8 阅读
  5. Vim 常用指令

    2024-06-12 22:22:03       7 阅读
  6. Python从入门到精通的学习路径

    2024-06-12 22:22:03       5 阅读
  7. 加载视频文件出现错误

    2024-06-12 22:22:03       10 阅读
  8. Django 里获取url里的参数

    2024-06-12 22:22:03       6 阅读
  9. decord GPU 编译

    2024-06-12 22:22:03       6 阅读