我在Debian 7 GNU/Linux上使用boost::locale(1.49)时遇到了一些问题(GCC版本为4.6.3-1)。代码保存在cp1251中。使用像“isalpha”(或“boost::algorithm::is_alpha”)这样的函数会导致异常(bad_cast)。看起来没有适当的 facet 进行此检查。以下是代码:
#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")
。但是,当使用boost生成语言环境时会出现相同的问题:std::locale loc(boost::locale::generator().generate("ru_RU.cp1251"));
。如果有人能解释一下代码有什么问题,或者如何使用boost和std检查cp1251语言环境下的类似isalpha函数,我将不胜感激。
std::locale loc(".1251")
。但是当使用boost生成区域设置时,出现了相同的问题:std::locale loc(boost::locale::generator().generate("ru_RU.cp1251"))
。 - Nemo