Повышение кроссплатформенности C ++ (Windows и Mac) сериализации std :: wstring

Я реализую сериализацию с использованием библиотек 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 содержит широкие строки и повысить интеллектуальные указатели на другие классы, которые, в свою очередь, сериализованы.

6
задан ST3 25 August 2013 в 14:58
поделиться