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形式で書き出されていると仮定すると、文字列をWindowsで使用されるUnicodeエンコーディングであるUTF-16に変換するためのコードを記述する必要があります。wstringはこれであなたを助けることができません。UTF-16に変換したら、wchar_tを使用してWindowsの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 に答える