C ++ archivo unicode io

Necesito una biblioteca de archivos io que pueda dar a mi programa una interfaz utf-16 (little endian), pero que pueda manejar archivos en otras codificaciones, principalmente ascii (solo entrada), utf-8, utf-16, utf-32 / ucs4, incluyendo Ordenes de byte endian tanto pequeñas como grandes.

Después de mirar alrededor, la única biblioteca que encontré fue la biblioteca de ICU ustdio.h.

Sin embargo, lo intenté, incluso pude lograr que funcionara con una parte muy simple del texto, y no hay mucha documentación sobre su uso, solo la página de referencia del archivo de la UCI que no proporciona ejemplos y muy pocos detalles (por ejemplo, haber realizado una UFILE de un ARCHIVO existente, ¿es seguro usar otras funciones que toman el ARCHIVO *? Junto con varias otras ...).

También id mucho más bien una biblioteca de c ++ que me puede dar una interfaz de flujo amplio a través de una interfaz 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);

salida

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

maleficio

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

EDITAR: La salida correcta en Windows sería:

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

Respuestas a la pregunta(5)

Su respuesta a la pregunta