2024 年 09 月 29 日 23:03:03 周日
原因分析
把从网上找的关键信息丢给 GPT 整合解释了一下:
Windows 内部使用 UTF-16 编码来处理 Unicode 字符,而中文操作系统通常采用 GBK 编码作为默认字符集。相比之下,CLion 默认使用 UTF-8 编码格式。当字符编码不匹配时,比如程序使用 UTF-8 输出,而系统却按 GBK 或 UTF-16 解析,就会造成乱码问题。此外,Windows 内核处理字符串时主要使用 UTF-16,而应用层允许用户自定义非 Unicode 字符的显示方式,如果编码未正确协调,就会出现这种错误。
解决方案 1:使用 UTF-8 编码、禁用 run.processes.with.pty
-
在设置中把所有的编码设置都调整为 UTF-8
-
双击 Shift 键弹出搜索栏,输入“Registry”,点击“注册表…”进入软件注册表界面
-
取消勾选
run.processes.with.pty
在 CLion 中,run.processes.with.pty 是一个设置选项,用于控制在运行和调试过程中是否使用伪终端(PTY) 。 PTY 是一种在操作系统上模拟终端的设备,它可以让你与程序进行交互,就像在真实的终端中一样。 当你运行或调试一个程序时,CLion 可以选择使用伪终端来模拟交互式输入和输出。
解决方案 2:程序运行时更改代码页
- 在文件开头引入库
#include <stdlib.h>
- 在 main 函数里开头添加一行
system("chcp 65001");
chcp
是 Windows 命令行中的一个命令,用于显示或设置当前的代码页;65001
是 UTF-8 编码对应的代码页号码。语句的目的是更改 Windows 命令行的代码页(code page)到 UTF-8 。
但这个方案的弊端是会在命令行开头输出一行 Active code page: 65001
。
而且代码只能在 Windows 平台上编译,除非使用条件编译:
#include <stdlib.h>
int main() {
#ifdef _WIN32
system("chcp 65001");
#endif
// 其他代码
return 0;
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于