如何将linux中编写的std :: wstring读入windows

时间:2011-09-26 14:55:15

标签: c++ windows linux cross-platform wstring

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

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

谢谢, 亚当

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您可以使用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,但也许应该有。{/ p>