Bonjour,
quelqu'un pourrait il m'éclairer sur l'usage de boost:locale. Je souhaiterais convertir des chaines de texte suivant différentes locales : typiquement FR et US.
voici un bout de code qui ne marche pas et qui lève une exception.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    string  spi = "3,14";
    BOOST_LOG_TRIVIAL(debug) << "try to convert " << spi;
    std::locale loc= boost::locale::generator().generate("fr_FR.UTF-8");
    std::locale oldloc = std::locale::global(loc);
    BOOST_LOG_TRIVIAL(debug) << "change locale from : "<< oldloc.name().c_str() << " to : "<<loc.name().c_str();
    char point = std::use_facet< std::numpunct<char> >(std::cin.getloc()).decimal_point();
    std::locale l1;
    BOOST_LOG_TRIVIAL(debug) << "locale l1 = "<<l1.name().c_str()<<" decimal sep = "<<point;
    try{
        double pi = boost::lexical_cast<double>(spi);
        BOOST_LOG_TRIVIAL(debug) << "pi=" << pi;
    }catch(boost::bad_lexical_cast & e){
        BOOST_LOG_TRIVIAL(debug) << "lexical cast error : " << e.what();
    }
Cela me donne à l'éxécution la sortie suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
[2020-05-06 07:50:20.628677] [0x00007fccc8355740] [debug]   try to convert 3,14
[2020-05-06 07:50:20.630141] [0x00007fccc8355740] [debug]   change locale from : C to : *
[2020-05-06 07:50:20.630214] [0x00007fccc8355740] [debug]   locale l1 = * decimal sep = .
[2020-05-06 07:50:20.630522] [0x00007fccc8355740] [debug]   lexical cast error : bad lexical cast: source type value could not be interpreted as target
Je ne comprend pas comment réaliser mes conversions de chaine de texte contenant des nombres selon différentes locales.

merci d'avance de vos idées/explications.