在使用Clion时,在保证文件编码,项目编码,属性文件的默认编码等均为UTF-8的情况下,当代码输出中存在中文字符时,内置控制台显示的输出为乱码。

image1

image2

2. 尝试解决方案

在CLion中解决内置控制台乱码问题,主要需要统一项目编码、控制台编码和系统环境编码。以下是具体步骤:

2.1 第一次尝试解决

1. 检查并设置项目文件编码(执行后未解决问题)

CLion的文件编码设置可能影响控制台输出的编码格式:

  1. 打开 File > Settings(Windows/Linux)或 CLion > Preferences(macOS)。
  2. 进入 Editor > File Encodings
  3. 确保以下选项均设置为 UTF-8
    • Global Encoding(全局编码)
    • Project Encoding(项目编码)
    • Default encoding for properties files(属性文件默认编码)
  4. 点击 OK 保存。

image3

2. 修改控制台输出编码(执行后未解决问题)

如果项目编码正确但控制台仍乱码,需单独设置控制台编码:

  1. 打开运行/调试配置:点击顶部菜单栏 Run > Edit Configurations
  2. 在左侧列表中选择你的运行配置(如 main 或自定义配置)。
  3. 在右侧 Configuration 标签页中,找到 Environment 区域,点击 Environment variables 右侧的 ...
  4. 点击 + 添加环境变量:
    • Name 输入 LC_ALL(Linux/macOS)或 PYTHONUTF8(Windows,针对部分场景)
    • Value 输入 en_US.UTF-8(强制UTF-8编码)
    • (Windows可选)添加 CONSOLE_ENCODING 并设置为 UTF-8
  5. 保存配置并重新运行程序。

image4

3. 针对Windows系统的额外设置(执行后未解决问题)

Windows默认控制台编码为GBK,可能与CLion的UTF-8冲突,需额外处理:

  1. 打开CLion的VM配置文件:
    • 点击 Help > Edit Custom VM Options
    • 在打开的文件中添加一行:Dfile.encoding=UTF-8
    • 保存并重启CLion。

image5

  1. (可选)修改Windows系统控制台编码:
    • 按下 Win + R,输入 cmd 打开命令提示符。
    • 执行命令 chcp 65001(切换到UTF-8编码)。
    • 重启CLion后尝试运行程序。

4. 检查代码中的输出编码(未手动指定输出编码,故未执行)

如果程序中手动指定了输出编码(如使用setlocale等函数),可能导致冲突:

  • 确保代码中未强制设置与UTF-8冲突的编码(如GBK)。
  • 示例:若使用C语言的printf输出中文,需确保代码文件为UTF-8编码,且未通过setlocale(LC_ALL, "zh_CN.GBK")强制设置GBK。

5. 针对CMake项目的补充设置(未尝试)

如果是CMake项目,可在CMakeLists.txt中添加编码相关编译选项:

# 确保编译器使用UTF-8编码处理源文件
if (MSVC)
    # Visual Studio编译器
    add_compile_options("/source-charset:utf-8")
else()
    # GCC/Clang编译器
    add_compile_options(-finput-charset=UTF-8)
endif()

通过以上步骤,基本可以解决CLion内置控制台的乱码问题。核心原则是:确保项目文件编码、控制台环境编码、程序输出编码三者统一为UTF-8。如果是Linux/macOS系统,通常只需完成前两步即可;Windows系统可能需要额外配置系统或VM选项。

2.2 执行了第一次尝试中的1,2,3方案后,仍未解决,进行第二次尝试

如果前面的步骤仍未解决乱码问题,可以尝试以下更深入的解决方案,针对不同场景进一步排查:

1. 强制CLion控制台编码(针对Java底层配置)(执行后未解决问题)

CLion基于Java开发,其控制台编码可能受Java虚拟机(JVM)参数影响,可直接强制指定:

  1. 打开 Help > Edit Custom VM Options(如果没有该文件,会提示创建)。

  2. 添加以下两行配置(覆盖默认编码):

    -Dfile.encoding=UTF-8
    -Dconsole.encoding=UTF-8
    
  3. 重启CLion 使配置生效,重新运行程序测试。

2. 针对C/C++程序的特殊处理(执行后成功解决问题,但需要每次指定编码,故以此为切入点)

如果是C/C++程序输出乱码,可能是编译器对字符串常量的编码处理问题:

  1. 在代码中显式指定输出编码转换(适用于Windows系统):

    #include <iostream>
    #include <windows.h> // 仅Windows需要
    
    int main() {
        // 将控制台输出编码设置为UTF-8(Windows特有)
        SetConsoleOutputCP(65001);
        // 测试输出
        std::cout << "中文测试" << std::endl;
        return 0;
    }

更多推荐