我们有一个在Windows和Linux上运行的程序。它将二进制的std :: wstrings写入文件。我们需要能够将从linux编写的文件读入windows。我们将字符串写为wchar_t列表。在linux上,每个wchar_t占用4个字节。在Windows上,每个wchar_t占用2个字节。
当读取linux写入Windows的文件时,如何将四字节wchar_t取入并将其放入2字节的wchar_t中?
谢谢, 亚当
答案 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>