问题描述
1.环境
vs2019 win10电脑
2.描述
在VS上使用c++给win10的注册表写入带中文的字符串时,意外发现中文乱码。
代码页是utf-8无bom版,然后百度说注册表是识别ascii码编码的,然后代码页采用utf-8,
所以会乱码。
我尝试用代码把中文从unicode转成muti多字节,在调试时发现为转之前调试器里的内容就是乱码的。
转换后还是乱码的,写到注册表也是乱码的。
解决过程
1.一开始我以为是代码页不是带bom的utf-8导致的,然后百度各种方法,改高级保存选项啥的,都不行。
而且高级保存选项改了之后,再次打开cpp文件,依旧会回到最初的格式,此方法不管用。
2.偶然想起之前搞QT的时候,用msvc编译项目,也会遇到无论如何都乱码的情况。
后来在某个地方百度到,vs的msvc默认的编译方式就不是utf-8的。
所以我开始怀疑是不是因为不带bom导致vs将代码识别为非utf-8,采用默认的方式进行了编译。
3.找到QT的cmake关于如何msvc默认utf-8的编码方式的代码
add_compile_options("$<$<C_COMPILER_ID:MSVC>:/utf-8>")
add_compile_options("$<$<CXX_COMPILER_ID:MSVC>:/utf-8>")
所以解决这个问题的关键是: "/utf-8"
4.找到VS项目相关的编译选项,添加一个 /utf-8即可。
(没有进行unicode转muti代码也成功的在注册表显示不乱码中文)
结论
右键项目 ----》 属性----》c/c++ -----》 命令行 ----》 其它选项(D) ----> 写入 /utf-8 再保存即可