【问题标题】:Tring to read a text file with emoji and print it用表情符号读取文本文件并打印
【发布时间】:2015-02-22 02:31:02
【问题描述】:

输入 -> ??????????

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

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

我正在做的就是这个

#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;
}

【问题讨论】:

  • 答案取决于该文件的编写方式 - 如果我查看您的问题的页面源,您用于输入的字符将显示为 &amp;#128514;。你希望处理什么样的编码——你用“unicode”标记,但是哪个? UTF-8? -16? -32? UCS-2? (我希望不会)。
  • 是的,您帖子中的“输入”没有正确显示这一事实应该被视为您对 Unicode 世界的介绍,您不能再假设一个字节是一个字符,并且,根据平台的不同,您可能需要处理 UTF-8,或者使用旧式 8 位 POSIX 函数以外的东西来处理 UTF-16。并且您需要了解文件中的字节顺序和字节顺序标记。
  • 文件是用 utf-8 编码的,而不是代码页 437,你必须先解决这个问题。例如,使用非标准的 "rt,ccs=UTF-8" 作为 fopen 的第二个参数。然后你必须编写一个 GUI 应用程序才能正确显示它,旧的 C 运行时电传用户界面只能侧面显示微笑:-p 要获得颜色 google "emoji directwrite 8.1"
  • 代码示例强烈表明这是 C 代码,而不是 C++。您希望得到哪种语言的答案?

标签: c text unicode file-handling emoji


【解决方案1】:

在 Unicode 编码中,表情符号必须占用多个字节。因此,在这种情况下,逐字节打印将无济于事。如果您将输出重定向到文件,您可能会得到与您的文件几乎相同的结果。

您可以尝试通过更改语言环境来打印字符串(在 Linux 上),或者您可以在 Windows 上尝试 wprintf(记得转换为宽字符串)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 2019-03-24
    • 2021-04-02
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    相关资源
    最近更新 更多