我正在按字节顺序读取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
中!我不知道/理解我如何将代表UTF-16字符的2个字节分别写入wstring?
我无法使用任何外部图书馆!感谢您的帮助!
答案 0 :(得分:1)
每当您将数据存储在文件(例如文本文件)中时,您需要将其“序列化”为一系列字节,当您将其读回时,您需要将其反序列化为数据表示。
UTF-16文件遵循以byte order mark开头的特定二进制格式,然后是必须合并为wchar_t值的字节对。
我建议你先从字节对中读取数据(例如用fgetc),然后根据字节顺序将它们组合成wchar_t,例如: wchar_t utf16 c = b1; c = c<<8 | b2
,然后在wstring上按下push_back。