Entrada / saída de arquivo STL e UTF-8. Como fazer isso?
eu usowchar_t
para cadeias internas e UTF-8 para armazenamento em arquivos. Preciso usar STL para inserir / enviar texto paratela e também faça isso usando o conjunto de caracteres lituano completo.
Está tudo bem porque eu não sou forçado a fazer o mesmo porarquivos, portanto, o exemplo a seguir faz o trabalho perfeitamente:
#include <io.h>
<code>#</code>include <fcntl.h>
<code>#</code>include <iostream>
_setmode (_fileno(stdout), _O_U16TEXT);
wcout << L"AaĄąfl" << endl;
Mas fiquei curioso e tentei fazer o mesmo com arquivos sem sucesso. Claro que eu poderia usar entrada / saída formatada, mas isso é ...desencorajado. 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);
Este trecho funcionaperfeitamente (embora eu não tenha certeza de como ele lida com caracteres malformados). Portanto, existe alguma maneira de:pegueFILE*
ou identificador de arquivo inteiro formar umstd::basic_*fstream
?simular_setmode ()
nele?ampliarstd::basic_*fstream
então ele lida com E / S UTF-8?Sim, estou estudando em uma universidade e isso está relacionado às minhas tarefas, mas estou tentando descobrir isso sozinho. Não influenciará minha nota nem nada disso.