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等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。