2011-04-09 36 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; 

它會正常工作。

相關問題