按字节顺序读取UTF-16格式的文件到wstring

Reading a UTF-16 formatted file bytewise to wstring

本文关键字:文件 wstring 格式 UTF-16 字节 顺序 读取      更新时间:2023-10-16

我正在读取一个UTF-16格式的文件,按字节读取,并希望将结果存储到std::wstring中。到目前为止,我能够读取文件:

char* path = "Some_Path_To_a_UTF-16_File"
char buffer[buffersize];
FILE* handle = fopen(path, "rb");
fread(buffer, 1, 100, handle);

在此之后,我有(一些)字节的文件存储在buffer(包括BOM)。

现在我的实际问题:我想存储的数据,我刚刚读到一个std::wstring !我不知道/理解我如何能得到那些分别2字节代表一个UTF-16字符成一个wstring?

我不能使用任何外部库!提前感谢您的帮助!

当您将数据存储在文件中(例如文本文件)时,您需要将其"序列化"为字节序列,当您读取它时,您需要将其反序列化为数据表示。

UTF-16文件遵循特定的二进制格式,该格式以字节顺序标记开始,然后后跟必须组合成wchar_t值的字节对。

我建议你首先以字节对读取数据(例如使用fgetc),并根据字节顺序将它们组合成wchar_t,例如wchar_t utf16 c = b1; c = c<<8 | b2,然后在wstring上push_back。