Записать wchar_t * в файл - работает только для некоторых символов - PullRequest
0 голосов
/ 10 сентября 2018

У меня есть методы, которые возвращают тексты Unicode, и мне нужно записать их в файл, но некоторые символы не записаны. У меня есть следующее:

const wchar_t* getStandardText() {
    return L"test";
}

const wchar_t* getUnicodeText()
{
    return L"testíček";
}

int main()
{
    FILE *file = fopen(FILE_NAME, "a");

    fputws(getStandardText(), file);
    fputws(getUnicodeText(), file);

    fclose(file);
}

Вывод в файл:

testtestí

Гораздо более запутанным для меня является то, что некоторые символы, такие как "í", работают, а другие, как "č", нет.

  • Я в Windows с VS 2015 Pro.
  • Для чтения файла я использую Notepad ++, который сообщает мне, что файл имеет кодировку ANSI.

Ответы [ 2 ]

0 голосов
/ 10 сентября 2018

Файл должен быть создан с соответствующей спецификацией. Следующее является наиболее предпочтительным способом, и убедитесь, что вы выгружаете в файл только символы UTF-8. И открыть через блокнот ++, чтобы просмотреть его.

FILE *file = fopen("test.txt", "a+, ccs=UTF-8");
0 голосов
/ 10 сентября 2018

Это работает в Windows ... Измените параметр mode, чтобы иметь явную кодировку ...

FILE *file = fopen("foobar.txt", "a+, ccs=UTF-16LE");

OR

FILE *file = fopen("foobar.txt", "a+, ccs=UTF-8");

Похоже, что метки порядка байтов (FF FE) накладываются на заголовок файла, чтобы указать, что текст файла - Unicode.

...