如何读取一个在linux中编写的std :: wstring到windows

我们有一个在Windows和Linux上运行的程序。 它将二进制std :: wstrings写入一个文件。 我们需要能够读取从linux写入Windows的文件。 我们把string写成wchar_t的列表。 在linux上,每个wchar_t占用4个字节。 在Windows上,每个wchar_t占用2个字节。

当读取linux写入Windows的文件时,如何取得四个字节wchar_t并将其放入2个字节的wchar_t中?

谢谢,亚当

您可以使用UTF8-CPP轻松地将文件从UTF-32转换为UTF-16:

#include <fstream> #include <iterator> #include <utf8.h> int main(int argc, char** argv) { std::ifstream file("source.txt"); std::string intermediate; std::wstring result; utf8::utf32to8(std::istreambuf_iterator<char>(file), std::istreambuf_iterator<char>(), std::back_inserter(intermediate)); utf8::utf8to16(intermediate.begin(), intermediate.end(), std::back_inserter(result)); } 

不幸的是,没有utf8::utf32to16 ,虽然也许应该有。

假设Linux代码是以UTF-32格式写出来的,那么必须编写一些代码将字符串转换为UTF-16,这是Windows上使用的Unicode编码。 wstring不能帮助你。 一旦你已经转换为UTF-16,你可以使用wchar_t在Windows上存储一个wstring。