C 语言学习笔记:CLion 终端输出中文乱码

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

  1. 在设置中把所有的编码设置都调整为 UTF-8

    image

  2. 双击 Shift 键弹出搜索栏,输入“Registry”,点击“注册表…”进入软件注册表界面

    image

  3. 取消勾选 run.processes.with.pty

    image

在 CLion 中,run.processes.with.pty 是一个设置选项,用于控制在运行和调试过程中是否使用伪终端(PTY) 。 PTY 是一种在操作系统上模拟终端的设备,它可以让你与程序进行交互,就像在真实的终端中一样。 当你运行或调试一个程序时,CLion 可以选择使用伪终端来模拟交互式输入和输出。

解决方案 2:程序运行时更改代码页

查考:【2024 年 clion2024.2 控制台中文乱码完美解决】_2022 最新乱码-CSDN 博客

  1. 在文件开头引入库 #include <stdlib.h>
  2. 在 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;
}

解决方案 3:更换运行环境,比如 Cygwin

  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    85 引用 • 165 回帖 • 2 关注
  • JCLearnC

    Jeffrey Chen 的 C 语言学习笔记

    2 引用
1 操作
JeffreyChen 在 2024-10-02 16:29:42 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...