Я реализую сериализацию с использованием библиотек Boost C ++ в программе, созданной для Windows (с использованием Visual Studio 2008) и Mac (с использованием GCC).Программа использует широкие строки (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.
Когда я пытаюсь прочитать файл, созданный в Windows, используяСборка Mac (и наоборот), моя программа аварийно завершает работу.
Насколько я понимаю, Windows до сих пор использует 2 байта на широкий символ, тогда как MacOSX (и я полагаю, Unix в целом) использует 4 байта.
Я сталкивался с возможными решениями, такими как utf8_codecvt_facet.cpp
, UTF8-CPP , ICU и Dinkumware , но я еще не виделпример , который будет работать с тем, что у меня уже есть (например, я бы предпочел не переписывать пять месяцев работы по сериализации на этом этапе):
std::wofstream ofs( "myOutputFile" );
boost::archive::text_woarchive oa( ... );
//... what do I put here? ...
oa << myMainClass;
myMainClass
содержит широкие строки и Boostумные указатели на другие классы, которые, в свою очередь, сериализуются.