Как читать std :: wstring, написанные в Linux в Windows - PullRequest
1 голос
/ 26 сентября 2011

У нас есть программа, которая работает на Windows и Linux. Он записывает std :: wstrings в двоичном виде в файл. Нам нужно иметь возможность читать файлы, написанные из Linux в Windows. Мы записываем строки в виде списка wchar_t. В linux каждый wchar_t занимает 4 байта. В Windows каждый wchar_t занимает 2 байта.

При чтении файла, написанного Linux в Windows, как можно взять четырехбайтовый wchar_t и поместить его в двухбайтовый wchar_t?

Спасибо, Адам

Ответы [ 2 ]

1 голос
/ 26 сентября 2011

Вы можете использовать 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, хотя, возможно, и должно быть.

1 голос
/ 26 сентября 2011

Предполагая, что код Linux записывается в формате UTF-32, вам придется написать некоторый код для преобразования строки в UTF-16, которая является кодировкой Unicode, используемой в Windows.wstring не может помочь вам с этим.После преобразования в UTF-16 вы можете сохранить wstring в Windows с помощью wchar_t.

...