尝试读取一个包含表情符号的文本文件并打印它

5

输入 ->

输出 -> ≡ƒÿé≡ƒÿé

我只想保持表情符号的原始状态。

我的操作很简单:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char ch;
    FILE *fp;

    fp = fopen("test.txt","r");
    while( ( ch = fgetc(fp) ) != EOF )
        printf("%c",ch);

    fclose(fp);
return 0;
}

1
答案取决于文件的编写方式 - 例如,如果我查看您的问题的页面源代码,则显示为&#128514;。 您希望处理哪种编码 - 您标记为“unicode”,但是使用哪种? UTF-8? -16? -32? UCS-2?(希望不是后者)。 - frasnian
1
是的,你在帖子中的“输入”未正确显示的事实应该被视为你进入Unicode世界的介绍。在这个世界里,你不能再假设一个字节就是一个字符了。而且,根据平台的不同,你可能需要处理UTF-8,或者使用其他东西来处理UTF-16,而不是旧式的8位POSIX函数。你还需要学习文件中的字节顺序和字节顺序标记。 - Dan Korn
2
该文件已经使用utf-8编码,而不是代码页437,您需要先解决这个问题。例如,可以使用非标准的“rt,ccs = UTF-8”作为fopen的第二个参数。然后,您需要编写一个GUI应用程序来正确显示它,旧版C运行时电传用户界面只能侧向显示笑脸 :-p。要获取颜色,请搜索“emoji directwrite 8.1”。 - Hans Passant
代码示例强烈表明这是C代码,而不是C ++。您希望用哪种语言回答? - user3920237
1
请查看一个类似于您的程序如何按预期运行:http://ideone.com/qQn1i7。 - n. m.
显示剩余5条评论
1个回答

1
在Unicode编码中,表情符号必须占用多个字节。因此,逐字节打印将无法帮助解决这个问题。如果将输出重定向到文件,则可能会得到与文件几乎相同的结果。
您可以尝试通过更改地区设置(在Linux上)或在Windows上尝试使用wprintf(记得转换为宽字符串)来打印字符串。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接