Windows (Visual Studio 2008 を使用) および Mac (GCC を使用) 用にビルドされたプログラムで、Boost C++ ライブラリを使用してシリアル化を実装しています。std::wstring
このプログラムは、約 30 のクラスでワイド文字列 ( ) を使用しています。プラットフォームによっては、( を使用してboost::archive::text_woarchive
) ファイルに保存すると、出力ファイル内でのワイド文字列の表現が異なります。
Windowsで保存:
H*e*l*l*o* *W*o*r*l*d*!* ...
MacOSXで保存:
H***e***l***l***o*** ***W***o***r***l***d***!*** ...
ここで、* は NULL 文字です。
Mac ビルドを使用して Windows で作成されたファイルを読み込もうとすると (逆も同様)、プログラムがクラッシュします。
これまでの私の理解では、Windows はワイド文字あたり 2 バイトをネイティブに使用しますが、MacOSX (および一般的には Unix と思われます) は 4 バイトを使用します。
utf8_codecvt_facet.cpp
、UTF8-CPP、ICU、Dinkumwareなどの可能なソリューションに出くわしましたが、既に持っているもので機能する例をまだ見ていません(たとえば、5 か月の連載作業をこの点):
std::wofstream ofs( "myOutputFile" );
boost::archive::text_woarchive oa( ... );
//... what do I put here? ...
oa << myMainClass;
myMainClass
ワイド文字列と、シリアル化される他のクラスへの Boost スマート ポインターが含まれています。