背景:团队使用VisualStudio进行跨平台项目开发。
遇到的问题:
首先,VisualStudio代码编辑器支持多种编码格式,这从VisualStudio带格式保存文件选项可以看出来。
图1.源码高级保存选项
VisualStudio(VS2017andlater)searchesforafilenamed'.editorconfig'inthedirectorycontainingyoursourcefiles,oranywhereabovethisdirectoryinthehierarchy.Thisfilecanbeusedtodirecttheeditortouseutf-8.Iusethefollowing:
图2.代码目录结构--图片来自VisualStudio官网
那么,是否可以自动生成一个.editorconfig文件呢?
VisualStudio支持根据本地设置生成一个.editorconfig文件,操作路径为:
Tools/Options/TextEditor/C/C++/CodeStype/General:Generate.editorconfigfilefromsettings.
图3.生成.editorconfig文件,截图来自MicrosoftVisualStudioCommunity2022(64-bit)-CurrentVersion17.2.1
得到.editorconfig之后就可以进行配置了,例如上述回答中的含义分别时(以下内容是.editorconfig的一部分,配置文件支持以#开始的注释):
如何将已有文件转码:实现Python脚本,按原编码读入数据并按UTF-8格式写出即可。
注意:配置文件修改后需要重启VisualStudio,通过文档格式化(Ctrl+K,D)判断配置是否生效,如查看格式化前后的空格数量。
自动转码后编译时可能遇到各种异常编译的错误或警告(如4819),这些错误是由于VisualStudio未按UTF-8格式进行编译导致的。既然文本编辑器支持以UTF-8编码的源文件,那么编译器也必然支持以UTF-8编码格式解析源文件。
直接通过VisualStudio配置项目时,进行如下设置:
图4.指定/utf-8编译选项,截图来自MicrosoftVisualStudioCommunity2022(64-bit)-CurrentVersion17.2.1
通过CMake配置项目时,cmake脚本指令:
控制面板/时钟/区域/区域/管理/更改系统区域设置,使用UnicodeUTF8提供全球语言支持
图5.更改系统区域设置
这种解决方法存在副作用。本地化是系统全局设置,可能将影响其他应用程序,当然微软自家的应用程序相信都已经做了很好的适配。作者电脑上一款软件中文版就在执行上述设置后出现了乱码,英文版正常。
此外,2.1中所述的指定编译选项/utf-8同样可以解决该警告问题,因此不建议更改系统区域设置。