C - 使用fprintf的奇怪行为

时间:2014-01-06 19:48:15

标签: c special-characters printf

我有一个项目,程序将一些消息保存到日志文件中。在我的程序开始时,我打开这个文件,函数在其中写入文本。因为我是巴西人,我们有像ç,ã和其他人一样的特殊表现。

我遇到的问题是,在其中一个文件中,我有以下一行:

fprintf(logfile, "\nArquivo \"Instruções.txt\" criado\n");

它完美无缺。日志文件是正确的。

同一项目的另一个文件包含以下行:

fprintf(logfile, "Carregando configurações\n");

并且'çÃμ'而不是'çõ'的日志文件不正确。

重要的是要注意我没有关闭文件并在此期间重新打开,从开始到结束都是一样的,我显示的第二行是在文件中写入的第一个命令。

另一点是,如果我将第一行复制到第二行的文件中,我会得到相同的奇怪符号,如果相反则会出现同样的问题。

现在我不知道发生了什么。我尝试使用%c和对应字符的数字(我在使用控制台时使用此方法),但是遇到了同样的问题。

非常感谢!

编辑:我不知道它是否清楚,但在同一个日志文件中,有正确和错误的字母。它突出了具有命令的项目的不同文件。

2 个答案:

答案 0 :(得分:1)

这是因为编辑器用来显示日志文件的编码方法,配置编辑器使用UTF-8编码,应该没问题。

答案 1 :(得分:1)

看起来日志文件被解释为一些旧的编码。如今,大多数东西都是用UNICODE编写的。在这种情况下,C不关心你的字符串是什么格式,但是由于现在大多数东西都是UTF-8,所以你最不可能得到任何其他类型的字符串。

在这种情况下,我们可以看出,因为UTF-8转义序列在未正确解释时看起来像这样;当您不正确地将其他内容解释为UTF-8时,例如,反过来说,你会看到UNICODE替换字符。

如果您使用记事本并且无法找到使用UTF-8打开文件的方法,请尝试使用其他文本编辑器。有吨 - gedit,Notepad ++等。

另外:如果你想知道为什么它不是乱码,那是因为UTF-8是一种与ASCII兼容的编码。前128个字符在UTF-8中与ASCII分配相同。许多字符集共享此属性,或者至少接近它。

编辑:在进一步的问题上,它确实看起来有些可疑。但至少,它肯定是一些奇怪的编码问题。