C 语言 printf 和 fprintf 在打印包含重音法语字符的字符串时搞砸了

C language printf and fprintf mess up when printing a string containing accented French characters

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

char *Message;
Message = “Vous êtes connecté maintenant.“
printf(%s\n”, Message);  

=> 打印混乱 => Vous êtes connecté 维护。

使用fprintf(fout,”%s\n”, Message);打印时出现同样的错误 对于这种情况,我的源文件中的编码是 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

请检查以下 link 的 ASCII table:

ASCII TABLE

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