gpt4 book ai didi

c - 输出utf-8到控制台

转载 作者:行者123 更新时间:2023-11-30 17:51:58 25 4
gpt4 key购买 nike

我有这段代码可以将 utf-8 字符打印到 Windows 控制台:

SetConsoleOutputCP(65001);
freopen(NULL, "w,ccs=UTF-8", stdout);

wchar_t u16 = 0x00A9;
unsigned char utf8_b[] = {0xc2, 0xa9, 0x0}; //same as using WideCharToMultibyte for u16
printf("%s", utf8_b); //(1)
wprintf(L"%c", u16); //(2)

(1) 产生正确的输出,即“©”,而(2) 的输出是替换字符 U+FFFD。我尝试将 stdout (2) 重定向到文件以查看编码转换是否存在问题,但它产生与 utf8_b[] 相同的字节序列。

谁能给我解释一下这是为什么吗?这是 Windows 问题吗?

顺便说一句,我的控制台字体已经设置为 Consolas。

编辑:我在使用(2)之前评论(1),所以我认为它与这里的流方向无关。我在某处读到 Windows 代码页 65001 中的一些实现错误可能会影响 C 标准 IO。谁能帮我确认一下吗?

最佳答案

在同一 FILE 流上混合宽输出和面向字节的输出会调用未定义的行为。您应该尝试使用 printf("%lc", u16); 或消除所有面向字节的输出。

关于c - 输出utf-8到控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16402463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com