I have a problem with the functions in the string_algo package.
Consider this piece of code:
#include <boost/algorithm/string.hpp>
int main() {
try{
string s = "meißen";
locale l("de_DE.UTF-8");
to_upper(s, l);
cout << s << endl;
catch(std::runtime_error& e){
cerr << e.what() << endl;
}
try{
string s = "composición";
locale l("es_CO.UTF-8");
to_upper(s, l);
cout << s << endl;
catch(std::runtime_error& e){
cerr << e.what() << endl;
}
}
The expected output for this code would be:
MEISSEN
COMPOSICIÓN
however the only thing I get is
MEIßEN
COMPOSICIóN
so, clearly the locale is not being taken into account. I even try to set the global locale with no success. What can I do?
std::toupper assumes a 1:1 conversion, so there is no hope for the ß to SS case, Boost.StringAlgo or not.
Looking at StringAlgo’s code, we see that it does use the locale (Except on Borland, it seems). So, for the other case, I’m curious: What is the result of
toupper('ó', std::locale("es_CO.UTF-8"))on your platform?Writing the above makes me think about something else: What is the encoding of the strings in your sources? UTF8? In that case, std::toupper will see two code units for ‘ó’, so there is no hope. Latin1? In that case, using a locale named “.UTF-8” is inconsistent.