2014-01-06 3 views
0

У меня есть проект, в котором программа сохраняет некоторые сообщения в файл журнала. В начале моей программы я открываю этот файл, и функции записывают в него текст. Поскольку я бразильский, у нас есть специальные кадастры, такие как ç, ã и другие.C - Странное поведение с fprintf

Проблема у меня в том, что в одном из файлов, у меня есть следующие строки:

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

и она прекрасно работает. Файл журнала верен.

Еще один файл, одного и тот же проект имеет следующую строку:

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

и файл_журнал неправилен с «Ã§Ãμ» вместо «со».

Важно заметить, что я не закрывал файл и не открывал его заново, это то же самое от начала до конца, и вторая строка, которую я показал, - это первая команда для записи в файл.

Другое дело, что если я скопирую эту первую строку в файл второй строки, я получаю одинаковые странные символы и ту же проблему, если делаю обратное.

Теперь я не знаю, что происходит. Я пробовал использовать% c и число, соответствующее символам (я использую этот метод при использовании консоли), но получаю ту же проблему.

Большое спасибо!

EDIT: Я не знаю, было ли это ясно, но в том же файле журнала есть как правильные, так и неправильные буквы. Это разные файлы проекта, которые имеют команды.

+2

Просмотр файла журнала как UTF-8. –

+0

Я делаю это, та же проблема –

+1

Вы не. Если это были проблемы с декодированием UTF-8, вы увидите символы замены UNICODE. Вместо этого мы видим, как выглядят 2-байтовые последовательности сдвига UTF-8, если они будут интерпретироваться с помощью одной однобайтовой кодировки. –

ответ

1

Похоже, что файл журнала интерпретируется как некоторая старая кодировка. В настоящее время большинство вещей написано в UNICODE. В этом случае C не заботится о том, какой формат имеет ваша строка, но поскольку в наши дни большинство UTF-8, маловероятно, что вы попали в любую другую строку.

В этом случае мы можем сказать, потому что escape-последовательности UTF-8 выглядят так, когда они неправильно интерпретируются; Когда вы неправильно интерпретируете что-то еще как UTF-8, например. наоборот, вместо этого вы увидите символы замены UNICODE.

Если вы используете Блокнот и не можете найти способ открыть файл с помощью UTF-8, попробуйте другой текстовый редактор. Есть тонны - gedit, Notepad ++ и т. Д.

Также: если вам интересно, почему все это не тарабарщина, это потому, что UTF-8 является кодировкой, совместимой с ASCII. Первые 128 символов назначаются одинаково в UTF-8 как ASCII. Множество наборов символов разделяет это свойство или, по крайней мере, близко к нему.

Редактировать: По дальнейшим вопросам, он действительно появляется что-то рыбное происходит. По крайней мере, это определенно какая-то странная проблема с кодировкой.

+0

Открыт с Notepad ++ и получил ту же проблему –

+1

После того, стало очевидно, что Notepad ++ на самом деле не очень хорош для UNICODE. В этом случае я в недоумении. Вам нужно будет проверить настройки и попытаться заставить UTF-8. –

+0

Я выбрал кодировку UTF-8 и без разницы –

1

Это из-за метода кодирования, который использует ваш редактор для отображения ваших файлов журнала, настройки вашего редактора для использования кодировки UTF-8, должно быть хорошо.

+0

, но я не понимаю, почему некоторые из них работают нормально, а некоторые нет –

Смежные вопросы