在windows中编码经常容易混淆,一个是代码文件的编码的问题,一个是控制台显示时解析的编码。
在visual studio 2022的工具的自定义菜单下点击命令添加命令可以把高级保存选项显示的命令添加到visual studio的菜单上,这时可以通过此按钮选择保存的代码的编码。
如果代码中定义的字符串没有u8或者u这种前缀,那么代码中的字符串的编码将会时根据保存的代码的编码类型得到的编码,比如代码保存成了utf8那么代码中的字符串将会是utf8,如果字符串有前缀,字符串将会是以特定的编码保存的,比如如果代码保存为GBK,代码中的字符串字面量"你好,世界"的编码将会是GBK,而u8"你好,世界"的编码将是utf8.
system("chcp 65001");的含义是设置控制台接受的字符串是utf8,其中65001是utf8的代码页。因此如果你控制台设置接受的字符串编码为utf8,只有你将代码保存为utf8,这里你没有前缀的字符串字面量才能正常输出,比如下面的例子
代码为gbk的情况
将其保存为utf8
注意保存utf8的时候不要选择带BOM的编码,这会导致乱码,暂时也不知道为什么,希望有人能给出解答。
当保存为utf8时将控制台设为其他代码页又会导致乱码,比如设置为GBK
之后再讲一下 _setmode(_fileno(stdout), _O_U8TEXT),所有输入到wcout的字符串将会转化为utf8,通过这种方式无论你将代码保存什么编码都不会导致乱码了,但是似乎chcp不论设置成什么都不会导致wcout乱码,希望有人能给出解答。
以下是两个例子:
总而言之,最方便的办法就是设置_setmode(_fileno(stdout), _O_U8TEXT),并且一致使用wcout了。