开发环境:cmake,Qt5.14.2,Visual 2019
本人的开发方式是使用cmake管理代码,在开发时使用cma生成Visual 2019工程,然后在这个工程里进行开发。
本人使用的日志是对spdlog进行封装后的,而spdlog是支持utf8的。
在cmake中设置utf8:
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/source-charset:utf-8>")
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/execution-charset:utf-8>")
而在Visual 2019中安装插件Force UTF-8(No BOM),这样就保证了代码文件、源字符集、执行字符集均为UTF8。
但是在这过程中自己差点被忽悠了。起因是之前我确实已经设置过,但是若将中文赋值给std::string,就会导致在vs2019中看到这个std::string是乱码,就觉得这样是错的。但实际上是因为windows系统默认使用的是gbk编码,而vs2019中std::string显示内容就会使用系统的默认编码,编码不匹配所以乱码,而将中文赋值给QString调试能正常显示和写入。
可以尝试将QString或std::string写入spdlog,写入文件的日志内容都是正确的。而QString与std::string互转就更简单了,因为他们是使用相同的编码。调用QString::fromStdString()即可。