3

Debian 7 GNU/Linuxでboost::locale(1.49)を使用する際に問題が発生しました(GCCのバージョンは4.6.3-1です)。コードはcp1251に保存されます。「isalpha」(または「boost :: alarmithm :: is_alpha」)などの関数を使用すると、例外(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;
}

Visual Studio2008を搭載したWindows7でも例外なく実行されます。ただし、問題が1つあります。この場合、「debug500」がfalseに設定されています。ロケールが次のように生成された場合にのみ正常に機能しますstd::locale loc(".1251")。ただし、ブーストによってロケールが生成される場合にも同じ問題が発生しますstd::locale loc(boost::locale::generator().generate("ru_RU.cp1251"));。誰かがコードの何が問題なのか、および/またはcp1251ロケールでboostとstdを使用して同様のチェック(isalpha)を行う方法を説明できれば幸いです。

4

1 に答える 1

0

交換:

unsigned char debug501 = 'Б';

と:

char debug501 = 'Б';
于 2012-05-21T15:37:14.157 に答える