当打印包含重音法语字符的字符串时,C语言printf和fprintf会出错

当打印包含重音法语字符的字符串时,C语言printf和fprintf会出错,c,string,encoding,printf,C,String,Encoding,Printf,下面是linux编译代码的摘录: char *Message; Message = “Vous êtes connecté maintenant.“ printf(%s\n”, Message); =>打印弄乱=>您的连接©主租户 使用fprintffout“%s\n”消息打印时也会发生相同的错误; 对于这种情况,我的源文件中的编码是utf-8,我在linux下用vim编辑它。但是,对于浏览器上的输出,我使用的是iso-8859-1: 我已经将这个更改为utf-8,对于上面的示例,prin

下面是linux编译代码的摘录:

char *Message;
Message = “Vous êtes connecté maintenant.“
printf(%s\n”, Message);  
=>打印弄乱=>您的连接©主租户

使用fprintffout“%s\n”消息打印时也会发生相同的错误; 对于这种情况,我的源文件中的编码是utf-8,我在linux下用vim编辑它。但是,对于浏览器上的输出,我使用的是iso-8859-1: 我已经将这个更改为utf-8,对于上面的示例,printf和fprintf的输出现在都是正确的。然而,对于另一种情况,我并没有得到一致的答案,其中,fprintf提供了预期的输出,但printf仍然在字符上出错:

    char *line;
    line = “<input type="submit" name="SignOut" value="Se déconnecter" class="btn" />”;
    printf(“%s”, line); => <input type="submit" name="SignOut" value="Se d�connecter" class="btn" /> => Not OK
    fprintf(fout, “%s”, line); => <input type="submit" name="SignOut" value="Se déconnecter" class="btn" /> => OK
总之,在相同的编码条件utf-8下,printf的不同行为令人惊讶

值得一提的是,第二个示例在输出编码iso-8859-1下工作,而输入文件是utf-8。
没有一致性!无论采用何种编码方案,utf-8或iso-8859-1,都可能会出现意想不到的情况!为什么?

另一种方法是直接输入所需字母的ASCII码,并将其附加到字符串中

char characterInAscii = INSERT_NUMBER_OF_ASCII_CHAR_HERE
请检查ASCII表的以下链接:


您需要确保使用的是iso-8859-1字符集:
而不是utf-8。这一要求适用于所有地方,包括C语言中的源文件:在写字板中打开它们并检查重音字符。然后保存在iso而不是utf下,这一直是重音欧洲字符问题的根源

这可能是由于编辑器、编译器和终端的组合。源文件中的这些字符是哪种编码?在输出二进制文件中,它们是什么?您的终端需要什么编码?FWIW,一个使用您的示例的测试程序在修复了智能引号并使用UTF-8进行所有操作后,在我的mac上运行良好。有关您的见解,请参阅此,如果intérêt显示为intérê,即由于双重编码而没有损坏,您是否有可能将UTF-8编码的文本显示为ISO-8859-1。如果您不确定在哪里为您的平台获取UTF-8插件,则默认情况下执行UTF-8的终端仿真器是Google Chrome的ssh插件?Message=“Vousêtes connectémaintenant.”是无效的C代码,因为它使用智能引号。Expect Message=Vousêtes connectémaintenant..发布您的代码的真实副本。谁知道还有什么问题?