Я читаю файл, который содержит как многобайтовые символы, так и однобайтовые символы, такие как символы ASCII. Я не понимаю, почему этот код не распечатывает точное содержание файла. Вместо символов rubbi sh печатаются символы.
Следующий код должен просто считывать из источника один символ за раз и распечатывать файл.
char input[] = ... <- File contents is stored there
char * current;
int length = strlen (input);
current = input;
mbstate_t state;
memset (&state, '\0', sizeof (state));
while (current < &input[ strlen(input) - 1])
{
wchar_t character;
size_t nbytes = mbrtowc (&character, current, length, &state);
if (nbytes == (size_t) -2 || nbytes == (size_t) -1)
{
fprintf (stderr, "mbrtowc returned error %ld\n", nbytes);
return -1;
}
fprintf (stdout, "%ls", &character);
current += nbytes;
length -= nbytes;
}
Я не Я понимаю, что я ошибаюсь, но я уверен, что что-то не так, поскольку вывод полностью искажен, например:
I_–_FINAN
Результаты в:
_
–
_
F
I
N
A
Круто!