Visual Studio默认源代码编码格式?为什么MSVC toolchain有多个cl.exe?如何检测文件编码格式?什么是UCRT?VS如何编译没有BOM头的UTF-8源代码?

Visual Studio默认源代码编码格式?

VS检测源代码编码格式优先级如下:

  • 默认情况下,Visual Studio 会检测文件开头的byte-order标记,以确定源文件是否采用Unicode 格式,例如 UTF-16 或 UTF-8.
  • 如果编译选项指定/utf-8 或 /source-charset 选项指定了编码,按照编译选项为准。
  • 如上两个都未找到,则假定源文件使用当前用户代码页(Code Page)中编码。

/utf-8 == /source-charset:utf-8 /execution-charset:utf-8

参考:/utf-8 (Set source and execution character sets to UTF-8) | Microsoft Learn

为什么MSVC toolchain有多个cl.exe?

MSVC提供的不仅仅一个host + target的toolchain,根据host架构x86和x64共2种,target架构有x86、x64、arm或arm64四种,总共有8个cl.exe. 例如:

  • D:\ProgramFiles\MicrosoftVisualStudio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx86\arm64\cl.exe 32bit x86架构host,编译成arm64架构可执行文件
  • D:\ProgramFiles\MicrosoftVisualStudio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64\cl.exe 64bit x64架构host,编译成x64架构可执行文件

如何检测文件编码格式?

世界无奇不有,编码格式也五花八门,在预先不知道编码格式的情况下,检测编码格式除了靠一些特定标志,剩下的就是靠猜。

  • Unicode世界有BOM头,凭此可以找到编码格式。
  • 某些文件在开头有编码指示,例如XML和HTML有charset的说明。
  • 利用编程语言的字符编码检测库,例如Python的chardet库,Node.js中的jschardet库等。
  • 利用file -i命令猜测文件编码。
  • 许多文本编辑器,例如Visual Studio Code,Notepad++, Sublime Text等,具有检测文件编码的功能。当你打开一个文件时,编辑器通常会自动检测编码,并可以点击右下角的编码格式选择新的编码。
  • 利用在线编码检测网站,例如file-encode-detect.

什么是UCRT?

从Visual Studio 2015开始,CRT被重构成UCRT. UCRT已变成Windows 10组件的一部分。UCRT统一了微软对于不同子平台CRT不同的缺点,可以统一维护。

  • 示例:C:\Program Files (x86)\Windows Kits\10\Lib\10.0.19041.0\ucrt\x86\ucrt.lib

VS如何编译没有BOM头的UTF-8源代码?

可参考 为什么中文字符串会报出错误”C2001: 常量中有换行符”? 利用/utf-8或者/source-charset:utf-8解决此问题。不同之处是/utf-8还指定了执行编码集为UTF-8:/execution-charset:utf-8.


若文章对您有帮助,欢迎关注 程序员小迷 。助您在编程路上越走越好!

微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是 程序员小迷 (致力于C、C++、C#、Android、iOS、Java、Kotlin、Objective-C、Swift、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值