2013-11-03 86 views
2

在Win 7 64bits和VS2010上升級1.54 x64。編譯爲「64版」,並運行下面的代碼:boost :: locale :: to_lower throw bad_cast exception

#include <boost/locale/conversion.hpp> 
std::wstring y = L"NoNseNSE"; 
std::wstring w = boost::locale::to_lower(y); 

拋出std::bad_cast例外。即使沒有添加之後改變(如在別處所建議的):

std::locale mylocale(""); 
std::locale::global(mylocale); 

或改變to_lower(y)到:to_lower(y, mylocale)或使用std::string代替std::wstring或在環境設置LANG。

目標是轉換爲小寫的意大利語UTF-8單詞。我沒有發現這樣的問題,所以我認爲這是我的機器特定問題或增強庫問題。順便說一下,我已經從sourceforge下載了預編譯的boost庫(boost_1_54_0-msvc-10.0-64.exe)。任何想法? 謝謝!當您的區域傳遞到boost::locale::to_lower 馬里奧

+0

如果使用utf8,則根據定義,'wstring'似乎不存在問題 – sehe

回答

4

,拋出此異常(默認情況下std::locale(),即全局區域的副本)沒有安裝boost::locale::converter方面。 See this for the related documentation.

改爲使用boost::locale::generator來創建區域設置。 (另請參閱文檔鏈接的示例,例如this one。)

+0

謝謝,現在可以使用。我錯誤地認爲'std :: locale lx;'和'boost :: locale :: generator gen; std :: locale lx = gen(「」);'是等價的。 – SiliconValley

相關問題