You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 11下C语言终端无法打印Emoji的问题求助

Windows终端C语言输出Emoji乱码问题解决

问题原因

  1. 终端编码不匹配:Windows 11默认终端(CMD/PowerShell)使用GBK编码,而代码输出的是UTF-8编码的Emoji,编码不一致导致乱码。
  2. C标准库输出编码默认值:Windows下printf默认采用系统本地编码(GBK)输出,不会自动适配UTF-8。
  3. 安全隐患:代码中使用的gets函数无缓冲区长度检查,极易造成缓冲区溢出,属于不安全函数。

解决方法

方法1:切换终端编码为UTF-8

  • 临时切换:打开终端后执行命令 chcp 65001,再运行编译后的程序。
  • 永久设置:打开Windows设置→「时间和语言」→「语言和区域」→「管理语言设置」→「更改系统区域设置」,勾选「Beta版:使用Unicode UTF-8提供全球语言支持」,重启系统后终端默认编码即为UTF-8。

方法2:代码中强制设置输出流为UTF-8

调用Windows API强制控制台输出使用UTF-8,无需手动修改终端设置:

#include <windows.h> // 新增头文件

int main()
{
    SetConsoleOutputCP(CP_UTF8); // 设置控制台输出编码为UTF-8
    // 后续原有代码...
}

方法3:替换不安全的gets函数

用fgets替代gets,同时处理换行符问题:

do
{
    printf("Enter ur message: ");
    fgets(message, sizeof(message), stdin);
    message[strcspn(message, "\n")] = '\0'; // 移除fgets读取到的换行符
}
while(strlen(message) <= 0 || strlen(message) >= 10);

改进后的完整代码

#include<stdio.h>
#include<string.h>
#include<windows.h> // 新增头文件

void print_bulb(int bit);

int main()
{
    SetConsoleOutputCP(CP_UTF8); // 设置控制台输出UTF-8
    char message[10];
    do
    {
        printf("Enter ur message: ");
        fgets(message, sizeof(message), stdin);
        message[strcspn(message, "\n")] = '\0'; // 去除换行符
    }
    while(strlen(message) <= 0 || strlen(message) >= 10);

    for (int i = 0; i < strlen(message); i++)
    {
        int decimal = message[i];
        int binary[] = {0,0,0,0,0,0,0,0};
        for (int j = 0; j <= 7; j++)
        {
            binary[j] = decimal % 2;
            decimal = decimal/2;
        }  

        for (int k = 7; k >= 0; k--)
        {
            print_bulb(binary[k]);
        }
        printf("\n");
    }

}

void print_bulb(int bit)
{
    if (bit == 0)
    {
        printf("\U000026AB");
    }
    else if (bit == 1)
    {         
        printf("\U0001F7E1");
    }
}

内容的提问来源于stack exchange,提问作者DinoGoWoof

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 11:02:37