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

时间:2015-09-24 10:53:01

标签: c++ unicode utf-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中!我不知道/理解我如何将代表UTF-16字符的2个字节分别写入wstring?

我无法使用任何外部图书馆!感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

每当您将数据存储在文件(例如文本文件)中时,您需要将其“序列化”为一系列字节,当您将其读回时,您需要将其反序列化为数据表示。

UTF-16文件遵循以byte order mark开头的特定二进制格式,然后是必须合并为wchar_t值的字节对。

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