当使用boost::locale时,std::isalpha会抛出bad_cast异常。

3

我在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函数,我将不胜感激。
1个回答

0

替换:

unsigned char debug501 = 'Б';

使用:

char debug501 = 'Б';

感谢您的回答,现在没有异常了。但是还有一个问题:在这种情况下,“debug500”被设置为false。我之前对Visual Studio的看法是错误的,当生成区域设置如下时,它可以正常工作:std::locale loc(".1251")。但是当使用boost生成区域设置时,出现了相同的问题:std::locale loc(boost::locale::generator().generate("ru_RU.cp1251")) - Nemo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接