Здесь могут быть разные проблемы.
При записи файла в режиме ansi, библиотека пытается преобразовать строку юникода, чтобы сузить символы. Если это невозможно, это вызывает ошибку, и больше ничего не записывается в поток, пока вы не очистите условие ошибки.
Как вы можете видеть ???...
в файле, я предполагаю, что это не текущая проблема - если logger.log
не использует operator <<
Но может быть еще одна проблема: даже если файл был правильно написан, файл редактор, используемый для отображения, может иметь проблемы с символами без ASCII. Чтобы убедиться в этом, вы должны изучить дамп файла ascii. Если символы, отображаемые как ?
, имеют код ASCII 0x3f
, проблема была действительно в момент записи. Но если они имеют коды ASCII, превышающие 127, то это просто проблема с отображением.
vim - это многоплатформенный редактор, который позволяет преобразовать файл в гекса, чтобы увидеть дамп ASCII.
Никто не знает, что делает этот регистратор. – AlexanderVX
Вы должны показать код, в котором регистратор - независимо от того, что может быть - записывает в файл. Может быть, вы пишете файл с кодировкой ANSI? – Blacktempel
Формально не гарантируется, что буфера строк заканчивается нулем. На практике я думаю, что это в значительной степени подразумевается гарантией C++ 11, также для строки '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' устраняя это сомнение, передать 'wstring' в регистратор, а не только указатель на его начало. –