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