std::isalpha löst bad_cast aus, wenn es mit boost::locale verwendet wird
-
12-12-2019 - |
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.
Lösung
Ersetzen:
unsigned char debug501 = 'Б';
mit:
char debug501 = 'Б';