C ++ Unicode-Datei io

Ich benötige eine Datei-io-Bibliothek, die meinem Programm eine UTF-16-Schnittstelle (Little Endian) geben kann, aber Dateien in anderen Codierungen verarbeiten kann, hauptsächlich ASCII (nur Eingabe), UTF-8, UTF-16, UTF-32 / UCS4 einschließlich Sowohl kleine als auch große Endian-Byteaufträge.

Die einzige Bibliothek, die ich gefunden habe, war die ICU-Bibliothek ustdio.h.

Ich habe es ausprobiert, aber ich konnte es nicht einmal mit einem sehr einfachen Textstück zum Laufen bringen, und es gibt so gut wie keine Dokumentation zu seiner Verwendung, nur die Referenzseite der ICU-Datei, die keine Beispiele und sehr wenig Details enthält (z. B. eine UFILE aus einer vorhandenen DATEI, ist es sicher, andere Funktionen zu verwenden, die die DATEI *? Zusammen mit mehreren anderen verwenden ...).

Ich bin auch eher eine C ++ - Bibliothek, die mir eine breite Stream-Schnittstelle über eine C-Schnittstelle geben kann ...

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);

Ausgabe

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

verhexen

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: Die korrekte Ausgabe unter Windows wäre:

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

Antworten auf die Frage(5)

Ihre Antwort auf die Frage