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.
Cela me donne à l'éxécution la sortie suivante :
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(); }
Je ne comprend pas comment réaliser mes conversions de chaine de texte contenant des nombres selon différentes locales.
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
merci d'avance de vos idées/explications.
Partager