Frage

Ich habe einige Probleme mit der Verwendung von boost::locale (1.49) unter Debian 7 GNU/Linux (Version von GCC ist 4.6.3-1).Der Code wird in cp1251 gespeichert.Die Verwendung von Funktionen wie „isalpha“ (oder „boost::algorithm::is_alpha“) führt zu einer Ausnahme (bad_cast).Es sieht so aus, als gäbe es für diese Prüfung keine richtige Facette.Hier ist der Code:

#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;
}

Es läuft ausnahmslos unter Windows 7 mit Visual Studio 2008.Es gibt jedoch immer noch ein Problem:„debug500“ ​​wird in diesem Fall auf false gesetzt.Es funktioniert nur dann einwandfrei, wenn das Gebietsschema wie folgt generiert wird: std::locale loc(".1251").Das gleiche Problem tritt jedoch auf, wenn das Gebietsschema durch Boost generiert wird: std::locale loc(boost::locale::generator().generate("ru_RU.cp1251"));.Ich wäre dankbar, wenn mir jemand erklären könnte, was mit dem Code nicht stimmt und/oder wie ich eine ähnliche Prüfung (isalpha) mit Boost und std mit dem Gebietsschema cp1251 durchführen kann.

War es hilfreich?

Lösung

Ersetzen:

unsigned char debug501 = 'Б';

mit:

char debug501 = 'Б';
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top