2

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

在将 linux 写入的文件读入 Windows 时,如何将 4 字节的 wchar_t 放入 2 字节的 wchar_t 中?

谢谢,亚当

4

2 回答 2

1

假设 Linux 代码以 UTF-32 格式输出,您必须编写一些代码将字符串转换为 UTF-16,这是 Windows 上使用的 Unicode 编码。wstring 帮不了你。转换为 UTF-16 后,您可以在 Windows 上使用 wchar_t 将其存储在 wstring 中。

于 2011-09-26T15:01:04.390 回答
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,尽管也许应该有。

于 2011-09-26T15:09:49.777 回答