UTF-8编码问题
随着新一代Visual Studio 2022
的到来,VS对于UTF-8编码的兼容性提升不能说不大,只能说是一点也没有。
个人开发项目基本是使用VS+Qt开发,两者默认处理编码的不同一直是个烦人的问题。VS在中文系统中使用GB2312或GBK编码,而Qt从源文件读取字符串编码则是默认UTF-8,当存在非ASCII字符时就不可避免产生乱码。
而Qt的多语言翻译工具在读取源文件时需要你的文件编码是UTF-8,否则就会乱码,这让我不得不将所有源文件都保存为UTF-8编码。
随之而来可能会有以下问题:
- VS编译报错(未识别的字符)
- VS内无法方便地以UTF-8编码保存文件
- 控制台输出中文乱码
解决办法:
- VS项目属性中设置
C/C++ -> 命令行
添加/utf-8
参数; - 安装
FileEncoding
或类似能快速切换编码和保存的插件;
在需要控制台输出的程序main函数中调用
SetConsoleOutputCP(65001);
(65001为UTF-8代码页,需要包含Windows.h)... #ifdef _WIN32 #include <Windows.h> #endif ... int main() { #ifdef _WIN32 SetConsoleOutputCP(65001); #endif ... }
EditorConfig配置文件
为了更方便自动设置代码样式,还可以通过EditorConfig配置文件配合VS的自动代码清理功能使用。
许多主流的编辑器都支持使用EditorConfig配置文件对整个项目的样式风格进行统一设置,不仅可以设置缩进与对齐等代码样式,还能指定保存的文件编码。
相关链接:
EditorConfig
EditorConfig 设置 - Visual Studio (Windows)
使用方法很简单,只需在项目根目录下创建文本文件.editorconfig
,并添加相应条目即可。
我的C++项目主要使用以下配置:
root = true
# 要应用的文件后缀
[*.{c,cc,cpp,cppm,cxx,h,h++,hh,hpp,hxx,inl,ipp,ixx}]
# 文件编码
charset = utf-8
# 换行符
end_of_line = crlf
# 尾部新行
insert_final_newline = true
# 空格或制表符缩进
indent_style = space
# 缩进大小
indent_size = 4
# 去除行尾空格
trim_trailing_whitespace = true
评论区(暂无评论)