C写意外的字符

时间:2018-08-04 18:47:50

标签: c utf-8 character-encoding

我以前从未真正使用过C,但是正在尝试运行以下代码:https://github.com/stanfordnlp/GloVe/blob/master/src/glove.c

问题:当我使用此代码读取utf8字符并仅输出该utf8字符时,它以不同的方式输出它们。

这是一个例子

    µl    µl 
    。    。 
    ß    Ã<9f> 
    versión    versión 
    ◘    â<97><98> 
    Léon    Léon 
    Résumé    Résumé 
    Cancún    Cancún 
    ������    ���ï¿

左侧是fid中的原始单词,右侧是此代码输出的内容。

fprintf发生在第234-237行。

    if (fscanf(fid,format,word) == 0) return 1;

    if (strcmp(word, "<unk>") == 0) return 1;
    fprintf(fout, "%s",word);

第一行从fid中的format读取单词。但是,format被定义为sprintf(format,"%%%ds",MAX_STRING_LENGTH);。它没有有关编码的任何信息。

我的问题是:C如何知道读取和输出哪种编码?在此文件上,我找不到它如何定义utf8,ISO-8859等编码。

我应该如何使这段代码写出左侧字符?

任何评论(简短也可以!)或一些我应该查询的关键字将受到高度赞赏!谢谢。

1 个答案:

答案 0 :(得分:3)

C对于您用于输入的任何编码一无所知。 fscanf调用将只读取以空格分隔的“字符”,其中每个字符都是单个 byte