2012-05-21 67 views
3

在Debian 7 GNU/Linux(GCC版本爲4.6.3-1)上使用boost :: locale(1.49)時遇到一些麻煩。代碼保存在cp1251中。使用諸如「isalpha」(或「boost :: algorithm :: is_alpha」)之類的函數會以異常(bad_cast)結束。看起來這個檢查沒有適當的方面。下面的代碼:std :: isalpha在使用boost :: locale時拋出bad_cast

#include <iostream> 

#include <boost/locale.hpp> 

int main() 
{ 
    boost::locale::generator gen; 
    std::locale loc(gen.generate("ru_RU.cp1251")); 
    unsigned char debug501 = 'Б'; 
    bool debug500 = std::isalpha(debug501, loc); 
    std::cout<< debug500; 

    return 0; 
} 

它可以運行在Windows 7也不例外與Visual Studio 2008。然而,還是有一個煩惱:「debug500」設置爲false,在這種情況下。只有當區域設置如下生成時,它才能正常工作:std::locale loc(".1251")。但是當locale由boost生成時出現相同的問題:std::locale loc(boost::locale::generator().generate("ru_RU.cp1251"));。 如果有人能夠解釋代碼有什麼問題,或者我可以使用boost和std與cp1251語言環境進行類似的檢查(isalpha),我會感激不盡。

回答

0

替換:

unsigned char debug501 = 'Б'; 

有:

char debug501 = 'Б'; 
+0

感謝您的回答,沒有例外了。但是,仍然存在一個問題:在這種情況下,「debug500」被設置爲false。我錯了Visual Studio,當locale生成像這樣時,它工作正常:'std :: locale loc(「。1251」)'。但是當locale由boost生成時會出現同樣的問題:'std :: locale loc(boost :: locale :: generator()。generate(「ru_RU.cp1251」));'。 – Nemo

+0

是的,它表示Б對我來說不是alpha ... –

相關問題