我以前从未真正使用过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等编码。
我应该如何使这段代码写出左侧字符?
任何评论(简短也可以!)或一些我应该查询的关键字将受到高度赞赏!谢谢。
答案 0 :(得分:3)
C对于您用于输入的任何编码一无所知。 fscanf
调用将只读取以空格分隔的“字符”,其中每个字符都是单个 byte 。