目录
- 原因分析
- 解决方案
- 测试
原因分析
Windows内部采用UTF-16编码,对于中文操作系统使用GBK编码,但是CLion默认文本编码为UTF-8,当编码不一致时,就会造成输出乱码,甚至编译不通过。
解决方案
当然,对于新版的Windows 11我们可以手动在设置中将操作系统的编码调整为UTF-8,这样文件源码以及控制台终端编码都统一为UTF-8肯定就没问题了,但是这样会导致其他一些软件乱码。
所以,我们还是尽量在软件层面统一编码,尽量不要默认修改操作系统的编码。 打开CLion集成开发环境,在设置界面设置各种编码均为UTF-8。
然后,双击Shift,在弹出的搜索栏中,输入“Registry”,点击“Registry…”进入软件注册表界面,去掉“run.processes.with.pty”中默认的对勾,即不要选中该项。这样控制台程序的输出对中文的解析就是政策的了。
测试
接下来,我们试一下控制台输出是否采用的是UTF-8编码?简单代码如下:
代码语言:javascript复制#include <fmt/format.h>
#include <string_view>
int main() {
constexpr std::string_view msg = "你好";
fmt::print("{}n", msg.length());
fmt::print(msg);
return 0;
}
可以看到:“你好”两个汉字的长度是6,即一个汉字占三个字节。
UTF-8编码是变长编码,通常汉字占三个字节,扩展B区以后的汉字占四个字节。而GBK编码是定长的编码,一个汉字占两个字节。
所以,取消选中“run.processes.with.pty”以后,控制台输出采用的是UTF-8编码。至于为什么去掉该选项会输出编码,原因不得而知!