Я использую wchar_t
для внутренних строк и UTF-8 для хранения в файлах. Мне нужно использовать STL для ввода / вывода текста на экран , а также использовать полную литовскую кодировку.
Все нормально, потому что меня не заставляют делать то же самое для файлов , поэтому следующий пример отлично справляется с работой:
#include <io.h>
<code>#</code>include <fcntl.h>
<code>#</code>include <iostream>
_setmode (_fileno(stdout), _O_U16TEXT);
wcout << L"AaĄąfl" << endl;
Но мне стало любопытно, и я попытался сделать то же самое с файлами, но безуспешно , Конечно, я мог бы использовать форматированный ввод / вывод, но это ...
не рекомендуется .
FILE* fp;
_wfopen_s (&fp, L"utf-8_out_test.txt", L"w");
_setmode (_fileno (fp), _O_U8TEXT);
_fwprintf_p (fp, L"AaĄą\nfl");
fclose (fp);
_wfopen_s (&fp, L"utf-8_in_test.txt", L"r");
_setmode (_fileno (fp), _O_U8TEXT);
wchar_t text[256];
fseek (fp, NULL, SEEK_SET);
fwscanf (fp, L"%s", text);
wcout << text << endl;
fwscanf (fp, L"%s", text);
wcout << text << endl;
fclose (fp);
Этот фрагмент прекрасно работает
(хотя я не уверен, как он обрабатывает некорректные символы). Итак, есть ли способ:
- получить
FILE*
или целочисленный дескриптор файла формы std::basic_*fstream
?
- имитировать
_setmode ()
на нем?
- расширение
std::basic_*fstream
, чтобы оно обрабатывало ввод / вывод UTF-8?
Да, я учусь в университете, и это в некоторой степени связано с моими заданиями, но я пытаюсь выяснить это для себя. Это не повлияет на мою оценку или что-то в этом роде.