std :: isalpha lance bad_cast lors de l'utilisation avec boost :: locale
-
12-12-2019 - |
Question
J'ai quelques problèmes avec l'utilisation de boost::locale (1.49) sur Debian 7 GNU/Linux (la version de GCC est 4.6.3-1).Le code est enregistré dans cp1251.L'utilisation de fonctions comme "isalpha" (ou "boost::algorithm::is_alpha") aboutit à une exception (bad_cast).On dirait qu'il n'y a pas de facette appropriée pour ce contrôle.Voici le 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;
}
Il fonctionne sans exception sous Windows 7 avec Visual Studio 2008.Cependant, il reste un problème :"debug500" est défini sur false dans ce cas.Cela fonctionne correctement uniquement lorsque les paramètres régionaux sont générés comme ceci : std::locale loc(".1251")
.Mais le même problème apparaît lorsque les paramètres régionaux sont générés par boost : std::locale loc(boost::locale::generator().generate("ru_RU.cp1251"));
.Je serais reconnaissant si quelqu'un pouvait expliquer ce qui ne va pas avec le code et/ou comment je peux effectuer une vérification similaire (isalpha) en utilisant boost et std avec les paramètres régionaux cp1251.
La solution
Remplacer:
unsigned char debug501 = 'Б';
avec:
char debug501 = 'Б';