2011-04-09 60 views
3

我正在使用boost来与文本存档序列化一个std :: wstring变量。如果我切换到std :: string它工作得很好,但是当我使用wstring我只有一个字符序列化。为什么?Boost只序列化std :: wstring的第一个字符

std::wstring text; 

template<class Archive> void serialize(Archive &ar, const unsigned int version) 
{ 
    ar & text; 
} 

... 

std::ostringstream stream; 

boost::archive::text_oarchive archive(stream); 

archive << params; 

... 

stream.str() 
+0

你可以尝试编译这个例子:http://groups.google.com/group/boost-list/browse_thread/thread/6b262e45a38c1296/542319ebaa7ecc82?pli=1 – 2011-04-09 21:49:01

+0

我个人不确定'text_oarchive'是如何工作的与'wstring's。 – 2011-04-09 21:49:43

回答

9

您试图使用窄字符存档序列化宽字符串。这会导致包含您的宽字符字符串的字节序列被解释为一系列窄字符。如果考虑到ASCII字符只占用相应宽字符编码的一个字节,而将宽字符集的所有其他字节都设为零,则很明显,窄字符档案在看到第一个字符后停止(因为它按照ASCII字符码打到零字节)。

如果你改变你的代码:

std::wstring text; 

template<class Archive> 
void serialize(Archive &ar, const unsigned int version) 
{ 
    ar & text; 
} 

std::wstringstream stream; 
boost::archive::text_woarchive archive(stream); 
archive << params; 

它会正常工作。