Arquivo unicode C ++ io

Eu preciso de uma biblioteca de arquivo io que possa dar ao meu programa uma interface utf-16 (little endian), mas possa manipular arquivos em outras codificações, principalmente as ascii (somente entrada), utf-8, utf-16, utf-32 / ucs4 incluindo ordens de bytes endian pequenos e grandes.

Tendo olhado em volta, a única biblioteca que encontrei foi a biblioteca ustdio.h da ICU.

Eu tentei, no entanto, eu até consegui que trabalhasse com um texto muito simples, e há praticamente zero documentação em seu uso, apenas a página de referência do arquivo ICU que não fornece exemplos e muito poucos detalhes (por exemplo, ter feito uma UFILE de um FILE existente, é seguro usar outras funções que levam o FILE * junto com vários outros ...).

Também id longe sim uma biblioteca c + + que pode me dar uma interface de fluxo amplo em uma interface de estilo C ...

std::wstring str = L"Hello World in UTF-16!\nAnother line.\n";
UFILE *ufile = u_fopen("out2.txt", "w", 0, "utf-16");
u_file_write(str.c_str(), str.size(), ufile);
u_fclose(ufile);

saída

Hello World in UTF-16!਍䄀渀漀琀栀攀爀 氀椀渀攀⸀ഀ

hexadecimal

FF FE 48 00 65 00 6C 00 6C 00 6F 00 20 00 57 00
6F 00 72 00 6C 00 64 00 20 00 69 00 6E 00 20 00
55 00 54 00 46 00 2D 00 31 00 36 00 21 00 0D 0A
00 41 00 6E 00 6F 00 74 00 68 00 65 00 72 00 20
00 6C 00 69 00 6E 00 65 00 2E 00 0D 0A 00

EDIT: A saída correta no windows seria:

FF FE 48 00 65 00 6C 00 6C 00 6F 00 20 00 57 00 
6F 00 72 00 6C 00 64 00 20 00 69 00 6E 00 20 00 
55 00 54 00 46 00 2D 00 31 00 36 00 21 00 0D 00 
0A 00 41 00 6E 00 6F 00 74 00 68 00 65 00 72 00
20 00 6C 00 69 00 6E 00 65 00 2E 00 0D 00 0A 00

questionAnswers(5)

yourAnswerToTheQuestion