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