Сравнение строк fussballmanager и fußballmanager в C++
В SQL вы можете успешно сравнить две строки в зависимости от параметров сортировки
С Latin1_General_CI_AS fussballmanager и fußballmanager считаются равными.
Они отличаются от SQL_Latin1_General_CP1_CI_AS.
Я пытаюсь воспроизвести то же самое поведение в C++. Я понимаю, что это зависит от локали, и я хотел бы иметь какой-то код, где пользователь может решить, какой язык использовать.
Что я уже пробовал:
STL
std::locale loc1("german"); wstring a("fussballmanager"); wstring b("fußballmanager"); const std::collate<wchar_t>& coll = use_facet<std::collate<wchar_t> >(loc1); int nRes = coll.compare(a.data(), a.data() + a.size(), b.data(), b.data() + b.size()); // => nRes is 1 not 0
ПОВЫШАТЬ
boost::locale::generator gen; std::locale loc = gen("en-GB"); std::locale::global(loc); wstring a("fussballmanager"); wstring b("fußballmanager"); int nRes = use_facet<boost::locale::collator<wchar_t> >(loc).compare(boost::locale::collator_base::primary, a, b); // Crash here (it works if I leave the locale string empty: replace en-GB by ""
BadJerry
Хорошо, если вы напишете следующее (добавьте ut8) - никакого сбоя в Boost!
std::locale loc = gen("en-GB.UTF-8");
Решения Йохена, вероятно, означают отсутствие необходимости в усилении для других ( у меня он уже был)