我需要一个文件io库,可以给我的程序提供utf-16(小端)接口,但可以处理其他编码的文件,主要是ascii(仅输入),utf-8,utf-16,utf-32 / ucs4,包括小端和大端字节顺序。
我搜寻了一圈,唯一找到的库是ICU ustdio.h库。
我尝试过它,但是我甚至无法让它与一个非常简单的文本一起工作,并且几乎没有关于其使用的文档,只有ICU文件参考页面,其中没有示例和很少的详细信息(例如从现有文件创建UFILE后,是否安全使用其他接受FILE *的函数?以及其他几个问题...)。
而且,我更喜欢一个能够为我提供宽流接口而不是C样式接口的c++库。
我搜寻了一圈,唯一找到的库是ICU ustdio.h库。
我尝试过它,但是我甚至无法让它与一个非常简单的文本一起工作,并且几乎没有关于其使用的文档,只有ICU文件参考页面,其中没有示例和很少的详细信息(例如从现有文件创建UFILE后,是否安全使用其他接受FILE *的函数?以及其他几个问题...)。
而且,我更喜欢一个能够为我提供宽流接口而不是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!䄀渀漀琀栀攀爀 氀椀渀攀⸀ഀ
hex
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
编辑:在Windows上的正确输出应该是:
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