Мне нужна библиотека file io, которая может дать моей программе интерфейс utf-16 (little-endian), но может обрабатывать файлы в других кодировках, в основном ascii (только для ввода), utf-8, utf-16, utf-32 / ucs4, включая байты в младшем и старшем порядке.
Посмотрев вокруг единственной библиотеки, которую я нашел, была библиотека ICU ustdio.h.
Я попробовал, однако я даже смог заставить его работать с очень простым кусочком текста, и документации по его использованию практически нет, только справочная страница файла ICU, в которой нет примеров и очень мало деталей (например, сделав UFILE из существующего ФАЙЛА, безопасно ли использовать другие функции, которые принимают ФАЙЛ *? вместе с несколькими другими ...).
Кроме того, это, скорее, библиотека C ++, которая может предоставить мне широкий интерфейс потока через интерфейс в стиле 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);
выход
Hello World in UTF-16!䄀渀漀琀栀攀爀 氀椀渀攀⸀ഀ
шестигранный
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
РЕДАКТИРОВАТЬ: правильный вывод на окна будет:
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