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

如何在C语言中正确打印UTF-8字符(如U+0C9A)?终端输出异常求助

在Windows终端用C语言打印UTF-8字符的解决方案

Windows终端(CMD、PowerShell)的默认编码和Locale设置与POSIX系统不同,直接使用en_US.UTF-8会导致UTF-8字符无法正常输出,以下是针对性的解决步骤:

  • 修正Locale参数:Windows不支持en_US.UTF-8格式的Locale名称,需替换为系统兼容的取值,比如".UTF-8"或"English_US.UTF-8"。同时建议检查setlocale的返回值,确认Locale设置成功:

    const char* locale = setlocale(LC_CTYPE, ".UTF-8");
    if (locale == NULL) {
        printf("Locale设置失败\n");
        return;
    }
    
  • 强制控制台使用UTF-8输出:Windows终端默认使用非UTF-8代码页(如GBK),需切换到UTF-8(代码页65001)。可以在程序中调用Win32 API自动设置,需包含<windows.h>头文件:

    SetConsoleOutputCP(CP_UTF8);
    
  • 确保终端字体支持目标字符:字符ಚ(U+0C9A)属于Devanagari字符集,需终端使用支持该字符的字体,比如Segoe UI、Consolas(新版本)或专门的Devanagari字体。可通过终端属性窗口切换字体。

修改后的完整代码

#include <stdio.h>
#include <wchar.h>
#include <locale.h>
#include <windows.h>

void print_utf8_char()
{
    // 设置UTF-8 Locale
    const char* locale = setlocale(LC_CTYPE, ".UTF-8");
    if (locale == NULL) {
        printf("Locale设置失败\n");
        return;
    }

    // 设置控制台输出为UTF-8代码页
    SetConsoleOutputCP(CP_UTF8);

    wchar_t ch = 0x0C9A; // U+0C9A 对应字符ಚ
    wprintf(L"Character for U+0C9A: %lc\n", ch);
}

int main()
{
    print_utf8_char();
    return 0;
}

额外说明

  • 编译时需使用支持宽字符的编译器(如MSVC、MinGW),无需额外特殊参数;
  • 若手动运行程序前已执行chcp 65001切换代码页,程序中可省略SetConsoleOutputCP调用,但建议保留以提升兼容性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 22:39:54